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