这个问题可能与这个问题重叠:模板类的模板构造函数的 C++ 显式模板特化 https://stackoverflow.com/questions/2563165/c-explicit-template-specialization-of-templated-constructor-of-templated-class。
但是,我没有在该线程中找到解决方案。
我有一个带有模板构造函数的模板类:
template<typename First, typename ... Rest> class var {
public:
template<typename T> var(T& t) {
std::cout << "general" << std::endl;
}
};
但是,如果该类使用同一类的对象作为参数进行实例化(即,我们想调用复制(或移动)构造函数),则应该执行一些特定操作。所以我尝试了以下方法:
template<typename First, typename ... Rest> template<>
var<First, Rest...>::var(var<First, Rest...>& v) {
std::cout << "copy" << std::endl;
}
当尝试用 g++ 4.6 编译它时,我得到
错误:“>”标记之前的显式专业化无效
错误:封闭的类模板没有显式专门化
因之前的错误而感到困惑,摆脱困境
我看到了问题,我必须明确地说出我想专门为哪个类构造函数......
然而,我希望我想做什么已经很清楚了。有什么想法吗?
模板构造函数不是复制构造函数:
template<typename First, typename ... Rest> class var {
public:
var() {};
var(const var& v) {
std::cout << "copy" << std::endl;
}
template<typename T>
var(const T& t) {
std::cout << "general" << std::endl;
}
};
int main()
{
var<int> i0;
var<int> i1(i0);
var<int> i2("Hello");
}
Gives
copy
general
注意:添加了一些常量
您尝试将非复制构造函数专门化为复制构造函数失败。
12.8:
类 X 的非模板构造函数是复制构造函数,如果其
第一个参数的类型为 X&、const X&、易失性 X& 或 const 易失性
X&,或者没有其他参数,或者所有其他参数
参数有默认参数 (8.3.6)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)