我有一个模板类,带有可变参数列表:
template<class ...Args>
struct Data{
};
现在我想拥有带有可变参数“通用引用”参数列表的构造函数,所以我使我的构造函数模板化:
template<class ...Args>
struct Data{
template<class ...CtrArgs>
Data(CtrArgs&& ... args){
// do something
}
};
现在我想制作一个Data
的实例:
Data<int, MyClass, bool> dat(1, MyClass(), false);
^^^^^^^^^^^^^^^^^^
Is this Args? Or CtrArgs?
问题是,这个<int, MyClass, bool>
会转到Args还是CtrArgs?
P.S。也许这很容易检查。但我问这个是因为在更复杂的情况下我有非常奇怪的行为。
答案 0 :(得分:1)
Data<int, MyClass, bool>
是通过使用模板参数Data
,int
,MyClass
实例化类模板bool
而获得的类型。因此,在您的示例中,模板参数转到Args
。
无法为构造函数显式指定模板参数。 C ++标准甚至如此明确地说(§14.8.1/ 7):
[注意:因为显式模板参数列表遵循函数模板名称,因为con 不使用a调用版本成员函数模板和构造函数成员函数模板 函数名称,无法为这些函数模板提供显式模板参数列表。 - 结束记录]