Base class template instantiation depending on derived class constructor argument type
下面,编译器不应该基于派生类构造函数参数类型生成基类构造函数吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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'
号
我理解错误,但为什么呢?
bar 取决于模板参数T 和bar 应为模板:1
2
3
4
5
6
7
8
9
10
11
12template<class T>
class bar : public foo<T>
{
public:
bar(int a):foo(a){}
};
int main()
{
bar<int> obj(10);
}或者希望
bar 从foo 的特定实例继承,例如:1
2
3
4
5
6
7
8
9
10
11class bar : public foo<int>
{
public:
bar(int a):foo(a){}
};
int main()
{
bar obj(10);
}号
小精灵