模板化构造函数中的模板参数数

Nik*_*iou 3 c++ templates language-lawyer c++11 c++14

对于(可能是非模板化的)类,我可以使用模板化构造函数:

struct A {
    template<class T> A(T const& arg) {}
}
Run Code Online (Sandbox Code Playgroud)

模板参数的数量是否可以推导出的参数数量受限?如果是这样,相关的标准报价是什么?

例如,如果构造函数是

template<class T1, class T2> A(T2 const& arg) {}
Run Code Online (Sandbox Code Playgroud)

此调用将导致编译错误

A<int>(double()); // creation of a temporary
Run Code Online (Sandbox Code Playgroud)

或者我如何调用构造函数?这也失败了:

A::A<int>(double()); // creation of a temporary
Run Code Online (Sandbox Code Playgroud)

Pio*_*ycz 6

标准中有一个注释,您不能在构造函数中使用显式模板参数:

[注意:因为显式模板参数列表遵循函数模板名称,并且因为在不使用函数名称的情况下调用转换成员函数模板和构造函数成员函数模板,所以无法为这些函数模板提供显式模板参数列表. - 尾注]

资料来源:14.5.2 Member templatesN3337草案.

但是当然你可以拥有比构造函数参数更多的构造函数模板参数 - 只要它们可以从构造函数参数中推导出来:

例:

struct A {
    template<class T, int N> A(T (&arg)[N]) {}
};
Run Code Online (Sandbox Code Playgroud)

  • 只要它们可以从构造函数参数或(其他/默认)模板参数推断出来. (2认同)