模板化构造函数中的模板参数数
Number of template arguments in templated constructor
对于一个(可能是非模板化的)类,我可以有一个模板化的构造函数:
struct A {
template<class T> A(T const& arg) {}
}
模板参数的数量是否受到可以推导的参数数量的限制?如果是,相关的标准报价是什么?
例如,如果构造函数是
template<class T1, class T2> A(T2 const& arg) {}
该调用将导致编译错误
A<int>(double()); // creation of a temporary
或者我该如何调用构造函数?这也会失败:
A::A<int>(double()); // creation of a temporary
标准中有一条注释,即不能在构造函数中使用显式模板参数:
[注意:由于显式模板参数列表跟随函数模板名称,并且因为转换成员函数模板和构造函数成员函数模板被调用如果不使用函数名,就无法为这些函数提供显式的模板参数列表函数模板--尾注]
来源:N3337草案中的14.5.2 Member templates
。
当然,你可以拥有比构造函数参数更多的构造函数模板参数——只要它们可以从构造函数参数中推导出来:
示例:
struct A {
template<class T, int N> A(T (&arg)[N]) {}
};
不能使用模板参数列表语法传递类型这一事实并不一定意味着你根本不能传递模板构造函数的类型列表:
template <typename...>
struct _ {};
struct A
{
template <class T1, class T2, class T3>
A(_<T1, T2, T3>) {}
};
int main()
{
A a{_<int, double, char>{}};
}
现场演示
相关文章:
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 如何在模板函数中实例化其长度使用模板参数的数组
- 基于参数创建数组
- Pybind11 默认参数 numpy 数组或 None
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 更改为参数的数组的值
- 根据 C++11 中的模板参数选择数组大小
- 是否可以使用C 函数中的const int参数创建数组
- 根据参数将数组分成 5 个不同的数组
- 你究竟如何通过函数的参数传递数组?
- 函数参数中数组大小未指定
- 数组作为函数参数查找数组长度时出错
- 如何使用函数参数设置数组大小
- 可变参数模板数组调用未定义的行为
- 提升 1.55,而 13 信号参数错误数
- 指向作为模板参数的数组的指针
- C++可变参数模板数组/访问元素
- 在 c++ 中没有参数的数组
- 具有双精度参数的数组
- 使用 C++11 的 begin() 和 end() 函数通过参数确定数组维度