エビデンスの反復可能なリストを取得してモデルを作成するメソッド generate() を持つインターフェース ModelGenerator が必要です。STL疑似ダックタイピング反復子イディオムの使用...
template<class Model>
class ModelGenerator {
public:
template<class Iterator>
virtual bool generate(Iterator begin, Iterator end, Model& model) = 0;
};
ただし、仮想関数はテンプレート化できません。したがって、クラス全体をテンプレート化する必要があります。
template<class Model, class Iterator>
class ModelGenerator {
public:
virtual bool generate(Iterator begin, Iterator end, Model& model) = 0;
};
理想的には、私がやりたいことは次のようなものです...
template<class Model, class Evidence>
class ModelGenerator {
public:
virtual bool generate(iterator<Evidence>& begin,
iterator<Evidence>& end,
Model& model) = 0;
};
しかし、反復子が継承するようなインターフェースはありません。(クラス std::iterator には一連の typedef のみが含まれ、メソッドは含まれません。)
私が考えられる唯一の方法は、ModelGenerator にメソッド addEvidence() を与えて、generate() を呼び出す前にそれらを 1 つずつ追加することですが、ModelGenerator に状態を与える必要がありますが、これは少し面倒です。
任意の STL コンテナーを使用する仮想メソッドを作成するにはどうすればよいですか?