C++ C++;模板压缩参数

C++ C++;模板压缩参数,c++,templates,variadic-templates,C++,Templates,Variadic Templates,我想知道如何将模板类型指定为“参数包” 注释行不起作用,因为它无法推断t(它具有相同的模板参数)。在下一行中,我可以通过提供T来解决这个问题,但我一直在思考如何提供参数包类型(问号在哪里) 模板T&Entity::addComponent(Args&&…Args)常量 { //返回entityManager->addComponent(标准::转发(args)…); 返回entityManager->addComponent(标准::转发(args)…); } 我想使用Args作为该类型。您不

我想知道如何将模板类型指定为“参数包”

注释行不起作用,因为它无法推断t(它具有相同的模板参数)。在下一行中,我可以通过提供T来解决这个问题,但我一直在思考如何提供参数包类型(问号在哪里)

模板T&Entity::addComponent(Args&&…Args)常量
{
//返回entityManager->addComponent(标准::转发(args)…);
返回entityManager->addComponent(标准::转发(args)…);
}

我想使用Args作为该类型。

您不需要指定参数包模板参数,因为它可以从函数参数推导出来。所以只需指定第一个模板参数(您必须这样做,因为
T
可以从任何地方推导出来)。e、 g

returnentitymanager->addComponent(std::forward(args)…);
//                                ^^^
如果要显式指定参数包模板参数,可以将其编写为

return addComponent<T, Args...>(std::forward<Args>(args)...);
//                     ^^^^^^^
返回addComponent(std::forward(args)…);
//                     ^^^^^^^

当我将Visual studio的“一致性模式”设置设置为“否”时,它起作用了。

是的,我尝试了两种方法。我已经创建了一个新的小项目来尝试它,并且一切都按照它应该的方式工作(两种解决方案都是您提供的)。我正在努力找出我的另一个项目中的问题。谢谢。当我将Visual studio的“一致性模式”设置为“否”时,它起作用了
return entityManager->addComponent<T>(std::forward<Args>(args)...);
//                                ^^^
return addComponent<T, Args...>(std::forward<Args>(args)...);
//                     ^^^^^^^