【发布时间】:2015-07-19 07:06:43
【问题描述】:
与带有参数包的函数声明不同,我发现类需要尖括号中每个参数的类型...
Component<IntegerPair, int, int> temp(40, 5);
...这似乎是多余的。这是我定义Component的方式:
template<typename T, class... T_Args>
class Component
{
public:
Component(T_Args... args)
: m_data(args...)
{}
T m_data;
};
- 有没有办法从上述语句中删除
int, int? - 如果是,是否可以将其删除?
- 另外,我的实例化方式
m_data安全吗?使用时std::forward<T_Args>(args)...我的编译器告诉我我没有 可以转换所有参数类型的构造函数。
【问题讨论】:
-
你基本上是在问是否可以从构造函数调用中推断出类模板参数——asnwer 是 no。您需要的是一个“制造商”功能 - 例如
std::make_pair或构造函数模板。 -
3:你需要接受一个通用引用
T_Args&&才能使用完美转发
标签: c++ templates parameter-passing class-template