C ++模板打包参数

问题描述 投票:1回答:2

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

注释行不起作用,因为它不能推导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作为该类型。

c++ templates variadic-templates
2个回答
1
投票

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

return entityManager->addComponent<T>(std::forward<Args>(args)...);
//                                ^^^

如果要显式指定参数包模板参数,则可以将其写为:

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.