私は工場「M」を作る。私はクラス "C"を構築する必要があります。私のクラス 'M'を含む開発者は、 'M :: getInst()'を呼び出し、正しく構築された 'C'のインスタンスを持っていたいと考えています。クラスがパラメータパックを公開することは可能ですか?
さらに私は、公共のコンストラクタを提供すること以外は絶対に何もしないで、私たちと一緒に働くことができるようにしたいと思います。コンストラクタ。
これは可能ですか?私が原則としてやりたいことは以下の通りです。問題は、C++でメソッド "types()"を書く方法がないことです。値として型を返すことは不可能です(1つでも!)。
ように、ユーザによって、呼び出されることになるstruct C {
String s; Blob b;
C(String a, Blob b) : s(a), b(b) {}
typelist types() {
return { String, Blob };
}
};
clas M {
template<typename T>
T* getInst() {
return getInst_imp<T::types()>();
};
template<class... Ks>
T* getInst_imp() {
return T(getValue(Ks)...);
}
};
:
C* instance = M::getInst<C>();
この理由は、「C」はコンポーネントタイプの固定されたセットからコンポーネントから構築されることです。私のクラス 'M'はそれらを初期化する方法の権威です。したがって、開発者がCの新しいフレーバーを作りたいと思うたびに、なぜ既存のすべてのホイールを再発明するのが理にかなっていますか?彼らは、必要なコンポーネントを 'M'に伝えるだけです。しかし、それを行う方法?あなたが今できる
これは完璧です!私は同様のことをやろうとしていましたが、typedefを使うことは考えていませんでした。クラス自体をテンプレート化しようとしていました。 「ユーザー」は、使用前に専門化する必要があったため、それはデッドエンドだと思っていました。 しかし、typedefはCの著者にその情報を格納する場所を与えます。ありがとう! – SaburoutaMishima