下面,编译器不应该根据派生类构造函数参数类型生成基类构造函数吗?
template <class T>
class foo
{
int a;
public:
foo(T a){}
// When I convert the constructor to a function template, it works fine.
// template <typename T> foo(T a){}
};
class bar : public foo<class T>
{
public:
bar(int a):foo(a){}
};
int main(void)
{
bar obj(10);
system("pause");
return 0;
}
error C2664: 'foo::foo(T)' : cannot convert parameter 1 from 'int' to 'T'
我明白这个错误,但为什么会这样?
最佳答案
class bar : public foo<class T>
中的语法不正确。
要么
bar
取决于模板参数T
和bar
应该是一个模板:template<class T> class bar : public foo<T> { public: bar(int a):foo(a){} }; int main() { bar<int> obj(10); }
或者你想要
bar
从foo
的特定实例继承例如:class bar : public foo<int> { public: bar(int a):foo(a){} }; int main() { bar obj(10); }
关于c++ - 基类模板实例化取决于派生类构造函数参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4619633/