C++ 模板打包参数
C++ template packed parameters
我想知道如何将模板类型指定为 "parameter pack"。
注释行不起作用,因为它无法推导 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 "Conformance Mode" 设置为 "No"
时它起作用了
我想知道如何将模板类型指定为 "parameter pack"。
注释行不起作用,因为它无法推导 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 "Conformance Mode" 设置为 "No"
时它起作用了