デザインに問題があります。
私は、インターフェースA(抽象構造)と、派生クラスを知らなくてもインターフェースAを使用するクラスWに実装されたワークフローを備えたポリモーフィック構造を持っています。これはDLL1に実装されており、A*を返すことができるファクトリインターフェイスFがあります。DLL2には、A1、A2などのAの具体的な実装と、A1およびA2インスタンスを作成できるファクトリ実装F1があります。
私が持っているファクトリーインターフェースはこんな感じです。
enum ObjectType{typeA1, typeA2};
class F
{
public:
A* create(enum ObjectType) = 0;
}
DLL1とDLL2の両方を知っているクライアントクラスによって、具体的なオブジェクトタイプがわかります。
しかし、DLL1を作成するときに、具象クラスの可能なタイプを事前に知っておく必要があるため、これは醜いです。そして、これは多態的なデザインの私の目的をほとんど打ち負かします。私はこれをしたくありません。
私が考えることができる代替オプションは、列挙の代わりに文字列を使用することです。ただし、文字列はタイプセーフではなく、エラーが発生しやすいため、文字列は避けたいと思います。クラスと同じように、継承によって列挙型を拡張する機会があればいいのにと思います。
私の質問:
より良い方法はありますか?C ++ 11で列挙型の拡張は可能ですか?(私は今それを持っていませんが)