这个问题可能与此问题重叠: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;
}
};
但是如果这个类用与参数相同的类的对象实例化(即,我们想调用copy-(或move-)构造函数),应该做一些特定的事情。所以我尝试了以下内容:
template<typename First, typename ... Rest> template<>
var<First, Rest...>::var(var<First, Rest...>& v) {
std::cout << "copy" << std::endl;
}
尝试用g ++ 4.6编译时,我得到了 错误:'&gt;'标记之前的显式专门化无效 错误:封闭类模板没有明确专门化 被早先的错误搞糊涂,拯救
我看到了问题,我必须明确说明我想将哪个类专门化构造函数...
然而,我希望我明白我想做什么。有什么想法吗?
答案 0 :(得分:1)
模板构造函数不是复制构造函数:
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");
}
给出
copy
general
注意:添加了一些const
您尝试将非复制构造函数专门化为复制构造函数失败。
12.8:
类X的非模板构造函数是复制构造函数(如果是) 第一个参数是X&amp;类型,const X&amp;,volatile X&amp;或const volatile X&amp;,并且没有其他参数或其他所有参数 参数有默认参数(8.3.6)。
答案 1 :(得分:0)