A級があります
template <typename T>
class A
{
public: virtual T get() = 0;
};
および 2 つの派生クラス 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;}
};