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"

时它起作用了