基类模板实例化取决于派生类构造函数参数类型
下面,编译器不应该根据派生类构造函数参数类型生成基类构造函数吗?
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;
}
错误 C2664:“foo::foo(T)”:无法将参数 1 从“int”转换为“T”
我理解该错误,但这是为什么呢?
In the following, shouldn't base class constructor be generated by the compiler based on derived class constructor argument type?
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'
I understand the error, but why is that ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
class bar : public foo
中的语法不正确。bar
取决于模板参数T
并且bar
应该是一个模板:或者你想要
bar
从foo
的特定实例继承,例如:The syntax in
class bar : public foo<class T>
is incorrect.Either
bar
depends on a template parameterT
andbar
should be a template :Or you want
bar
to inherit from a specific instantiation offoo
such as :