【发布时间】:2014-04-07 21:03:53
【问题描述】:
我尝试专门化构造函数具有模板化参数的类,但我不想为每个模板专门化专门化构造函数。例如:
template<typename A, typename B>
struct S{
S( A _a, B _b ) : a(_a), b(_b){}
A a;
B b;
};
//Partial specialization
template<typename A>
struct S<A, int>{
};
int main( int argc, char* argv[] ) {
S<char, float> s0('1', 1.0);
S<char, int> s1('1', 1); //Compilation error
return 0;
}
编译错误:
main.cpp:13:24: error: no matching function for call to ‘S<char, int>::S(char, int)’
S<char, int> s1('1', 1);
^
main.cpp:13:24: note: candidates are:
main.cpp:9:8: note: S<char, int>::S()
struct S<A, int>{
^
main.cpp:9:8: note: candidate expects 0 arguments, 2 provided
main.cpp:9:8: note: S<char, int>::S(const S<char, int>&)
main.cpp:9:8: note: candidate expects 1 argument, 2 provided
如果我附加构造函数,编译将成功完成:
S( A _a, int _b ) : a(_a), b(_b){}
到具有所有领域(a 和 b)的专业类。
为什么它不起作用?为什么没有自动生成构造函数?
【问题讨论】:
-
您可以使用通用基类(模板)+ 继承 ctor 作为解决方法(在 C++11 中)。