答えは "あなたはテンプレートを使うことができず、仮想関数(動的多形性)を使わなければなりません"と確信していますが、たくさんのコードを複製しなければならないようですもし私がその道を行くなら。ここに設定があります:"実行時のテンプレート"
私は現在2つのクラス、ColorImageSegmentationとGrayscaleImageSegmentationを持っています。彼らは基本的に同じことをしますが、3つの違いがあります - それらは異なるタイプ(ColorImageとGrayscaleImage)で動作します - ヒストグラムの次元数(3対1)が異なります - PixelDifference関数はイメージタイプ
私はクラス
template <TImageType>
class ImageSegmentation
{
};
を作成した場合、私は良い形になります。しかし、私は別のクラスの一員として、このオブジェクトがしたい:
class MyMainClass
{
ImageSegmentation MyImageSegmentation;
};
をしかし、ユーザは、グレースケール画像を開いた場合、私はMyImageSegmentation<GrayScaleType>
をインスタンス化したい(MyImageSegmentation
のタイプを決定する必要がある。同様のため。派生クラスでは、カラー画像、MyImageSegmentation<ColorType>
)
、私はポインタを格納してから行うことができます:。
class MyMainClass
{
ImageSegmentation* MyImageSegmentation;
};
... user does something...
MyImageSegmentation = new ColorImageSegmentation;
が、どのように私はテンプレートを使用して、このような何かをしますか?問題は、私はたくさんの持っている:起こって物事の
typedef TImageType::HistogramType HistogramType;
typedef TImageType::PixelType PixelType;
ソートを、ので、私は、コードの全体の束を複製することなく、動的な多型モデルに変換する方法を知りません。
お散歩に申し訳ありません...誰にも私の提案はありますか?
おかげで、
デビッド
質問を編集して、コードサンプルを適切にフォーマットしてください。 – chris
BoostのGIL(http://www.boost.org/doc/libs/1_45_0/libs/gil/doc/index.html)も同じことをしています。あなたはその問題をどのように解決したのかを確認することができます。 – liori