SSCE を作成しようとしましたが、これは通常、問題を早期に発見するのにも役立つためです。ただし、これに対する解決策が見つからないようですので、未指定のテンプレート クラス ポインタである引数を定義できるかどうかを知りたいです。
インターフェイスを定義し、xerces の実装の詳細 (トランスコーディングやこのすべてのオーバーヘッドなど) を処理する必要があるパーサー クラスを用意しました。インターフェイス クラスは、(SAX) パーサーからオブジェクトを作成するように設計されますが、xerces ライブラリを処理する必要はありません。
Java では、次のような未指定のジェネリック型引数を使用できることを知っています。
class Parser
{
public Parser(IGenericInterface<?> oImpl) {};
}
基本的に、これを C++ で行う方法を知りたいです。以下の例では、タイプが欠落しているため、インターフェイス変数を宣言する行でコンパイラ エラーが発生します。もちろん、クラス宣言では型は不明であり、 に示すように実行時に割り当てられる必要がありますmain
。
#include <iostream>
#include <string>
template <class T>
class IGenericInterface
{
public:
IGenericInterface() {};
virtual ~IGenericInterface() {};
virtual T *createInstance(void) = 0;
};
template <class T>
class Implementation : public IGenericInterface<T>
{
public:
Implementation() {};
virtual ~Implementation() {};
T *createInstance(void)
{
T * t = new T;
return t;
}
};
class Parser
{
public:
Parser(IGenericInterface *oImpl) { mImpl = oImpl; };
virtual ~Parser() { delete mImpl; };
void doSomething(void) { do whatrever is needed; t = createInstance(); };
private:
IGenericInterface *mImpl;
};
int main()
{
Parser *p = new Parser(new Implementation<int>());
sleep(3);
return 0;
}
Parser
では、コンストラクターを定義して、任意のインターフェイス引数を渡すにはどうすればよいでしょうか?