![](/img/trans.png)
[英]C++ explicit template specialization of templated constructor of templated class
[英]Explicit template specialization for templated constructor of templated class
这个问题可能与这个问题重叠: 模板化类的模板化构造函数的C ++显式模板特化 。 但是,我没有在该线程中找到解决方案。
我有一个带有模板化构造函数的模板化类:
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编译它时,我得到错误:'>'令牌错误之前的无效显式特化:封闭类模板没有明确地被早期错误专门混淆,拯救
我看到了问题,我必须明确说明我想将哪个类专门化构造函数...
但是,我希望我明白我想做什么。 有什么想法?
模板构造函数不是复制构造函数:
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&,const X&,volatile X&或const volatile X&,并且没有其他参数或者所有其他参数都有默认参数,则类X的非模板构造函数是一个复制构造函数(8.3.6) )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.