C ++调用模板类的模板化构造函数

时间:2014-07-24 03:23:36

标签: c++ templates

我有一个模板类,带有可变参数列表:

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。也许这很容易检查。但我问这个是因为在更复杂的情况下我有非常奇怪的行为。

1 个答案:

答案 0 :(得分:1)

Data<int, MyClass, bool>是通过使用模板参数DataintMyClass实例化类模板bool而获得的类型。因此,在您的示例中,模板参数转到Args

无法为构造函数显式指定模板参数。 C ++标准甚至如此明确地说(§14.8.1/ 7):

  

[注意:因为显式模板参数列表遵循函数模板名称,因为con   不使用a调用版本成员函数模板和构造函数成员函数模板   函数名称,无法为这些函数模板提供显式模板参数列表。    - 结束记录]