至っておりません。もし何かヒントのようなものを頂ければ幸いです。
基本クラスにて純粋仮想関数を定義し、それを派生クラスでオーバーライドしております。
基本クラスのポインタを使って派生クラスのオブジェクトを保持し、複数ある派生クラスの動作を
基本クラスの関数で統一的に呼び出すために使っております。
今、派生クラスの方で定義をする関数が、内容はほとんど同じでデータ型のみが異なり、
templateが使えれば非常に楽ができます。ところが、色々と試したのですが、現状だと
Windows 7 x64上のg++ (tdm64-2) 4.8.1でコンパイルを通すことができません。現状では
マクロを使って多少楽をして全ての定義を書く、というくらいしか対処方法が思い付きません。
仮想関数にはtemplateは使えないとの記述はあったので、こちらは宣言のみなので仕方なく
べたに全てのパターンを書いたのですが、せめて派生クラスの実際の定義で無為に長い定義を
するのを避ける方法はありませんでしょうか?
まとめますと、基本クラスの純粋仮想関数を派生クラスにてオーバーライドする際、
データ型のみが異なる関数をできるだけシンプルに書く方法を探しております。
よろしくお願いいたします。参考に、単純化したコードを以下に付けさせていただきます。
#include <iostream>
using namespace std;
class base
{
public:
virtual void ConvertData(float dst, double src)=0;
virtual void ConvertData(double dst, float src)=0;
};
class derived: public base
{
public:
derived(void){};
template <typename T1, typename T2> void ConvertData(T1 dst, T2 src){dst=src;};
//void ConvertData(float dst, double src){dst=src;};
//void ConvertData(double dst, float src){dst=src;};
};
template void derived::ConvertData(float dst, double src);
template void derived::ConvertData(double dst, float src);
int main()
{
derived d=derived();
cout << "main" << endl;
}