1
template <typename T>
class A
{
public: virtual T get() = 0;
};
和两个派生类B,C和get()方法
template <typename T>
class B : public A<T>
{
private: T b;
public: T get() {return b;}
};
template <typename T>
struct Test
{
T data; typedef T Type;
};
如何设计获得()来能够返回一个用作数据成员的通用对象吗?我试图templatize数据类型测试
template <typename Data>
class C : public B <typename Data::Type>
{
private: Data c;
public: virtual Data get() {return c;}
};
int main(int argc, char* argv[])
{
C <Test<double>> *c = new C<Test<double>>();
c->get();
}
但该示例仍然无法正常工作。出现以下消息:
Error 1 error C2555: 'C<Data>::get':
overriding virtual function return type differs and
is not covariant from 'B<T>::get()
如何修复代码?感谢您的帮助...
类层次表示错误处理的一个非常简单的示例。派生类的所有得到()方法返回错误对象:变量,向量,矩阵等...
例如类B表示变量,C类的矩阵..
更新问题:
很抱歉,但我在同一时间做更多的事情......我不认识
template <typename Data>
class C : public B <typename Data::Type>
{
集合A的返回类型,B翻番和C必须得双倍返还。正确的版本是
template <typename Data>
class C : public A <Data>
{
private: Data c;
public: virtual Data get() {return c;}
};
从上面的代码我不能告诉你想要做什么。但通过将'virtual Data get(){return c;}'行更改为'virtual typename Data :: Type get(){return c.data;}'将使编译顺利进行。 – silvesthu 2013-05-06 20:07:05
@ silvesthu:它将用于错误处理。 get()函数返回引起异常的对象。 – justik 2013-05-06 20:18:49
好的。我仍然不清楚Data和Data :: Type的关系。但至少如果'class C:public B',get()函数应该返回一个'Data :: Type'对象。 –
silvesthu
2013-05-06 20:31:33