有A级
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;
};
如何设计 get() 以能够返回用作数据成员的通用对象?我试图模板化数据类型 Test
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()
如何修复代码?谢谢你的帮助...
类层次结构代表了一个非常简化的错误处理示例。派生类的所有 get() 方法都返回错误对象:变量、向量、矩阵等...
例如B类代表一个变量,C类代表一个矩阵..
更新的问题:
抱歉,我同时在做更多的事情……我没认出
template <typename Data>
class C : public B <typename Data::Type>
{
将 A、B 的返回类型设置为 double,C 也必须返回 double。正确的版本是
template <typename Data>
class C : public A <Data>
{
private: Data c;
public: virtual Data get() {return c;}
};