在下面,不应该基于派生类构造函数参数类型由编译器生成基类构造函数?
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;
}
Run Code Online (Sandbox Code Playgroud)
错误C2664:'foo :: foo(T)':无法将参数1从'int'转换为'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);
}
Run Code Online (Sandbox Code Playgroud)或者您希望bar从特定的实例化继承,foo例如:
class bar : public foo<int>
{
public:
bar(int a):foo(a){}
};
int main()
{
bar obj(10);
}
Run Code Online (Sandbox Code Playgroud)