出力にポリシーを使用するテンプレートクラスと、データメンバーのタイプを決定する別のテンプレート引数があります。さらに、コンストラクターは、プライベートポインターに格納されている基本クラスへのポインターを受け取ります。このオブジェクトの関数は、テンプレートクラスへのthisポインターを取得して、データへのアクセスを許可します。コードでは、これは次のようになります。
class ShapeGenerator;
template <typename PointData, typename OutputPolicy> class ModelCreator {
private:
OutputPolicy output;
ShapeGenerator* shape
std::vector<PointData> data;
public:
ModelCreator (ShapeGenerator *s) : shape(s) { }
void createShape() { shape->generateShape(this); }
};
ShapeGeneratorはインターフェースであり、実装する必要があります。次のようになります。
class ShapeGenerator {
public:
void generateShape (ModelCreator* m) = 0;
};
これをg++4.3.4(cygwin)でコンパイルすると、ShapeGenerator::generateShapeでエラーが発生します'ModelCreater' is not a type
。ModelCreatorの前方宣言を入れましたが、何も変わりませんでした。タイプとパラメーターのいくつかの組み合わせを試してみました。たとえば、ベクトルのみを渡すと、不完全なタイプについて何かを示すエラーメッセージが表示されました。これがここでの問題だと思います。
それで、特定の議論なしでテンプレート化されたタイプを渡すことは可能ですか?もしそうなら、どのように?
編集: 私はModelCreatorタイプ名に縛られていません。もっとテンプレートを書かなければならない場合-これは問題ではありません。ただし、ShapeCreatorオブジェクトでModelCreatorのタイプを指定したくありません。それは可能ですか?
edit2:わかりまし た、私はこの「デザイン」について少し楽観的だったと思います。いくつかの材料を投入してスープを手に入れるだけでよかったでしょう。しかし今、塩は鍋の中の水の種類を知らなければなりません。テンプレートをプレーンな古い構成に変更します。みんなありがとう。