我想知道如何将模板类型指定为“参数包”。
注释行不起作用,因为它不能推导T(它具有相同的模板参数)。在下一行中,我可以通过提供T来解决此问题,但是我在如何提供参数包类型(问号所在的位置)方面陷入困境。
template<typename T, typename... Args> T& Entity::addComponent(Args&&... args) const
{
//return entityManager->addComponent(std::forward<Args>(args)...);
return entityManager->addComponent<T, ?????>(std::forward<Args>(args)...);
}
我想使用Args作为该类型。
您不需要指定参数包模板参数,因为它可以从函数参数中推导出来。因此,只需指定第一个模板参数(并且您必须这样做,因为T
可以从任何地方推导出)。例如
return entityManager->addComponent<T>(std::forward<Args>(args)...);
// ^^^
如果要显式指定参数包模板参数,则可以将其写为:
return addComponent<T, Args...>(std::forward<Args>(args)...);
// ^^^^^^^
当我将Visual Studio的“一致性模式”设置设置为“否”时,它起作用了>]