ポリシーを使用して作成されたいくつかのタイプがあります。
template <typename PolicyA, typename PolicyB>
class BaseType : PolicyA, PolicyB
{};
struct MyPolicyA {};
struct MyPolicyB {};
struct OtherPolicyB {};
using SpecializedTypeX = BaseType<MyPolicyA, MyPolicyB>;
using SpecializedTypeY = BaseType<MyPolicyA, OtherPolicyB>;
ここで、コマンドラインなどからの入力に基づいて、使用するSpecializedTypeをエレガントに選択できるメカニズムを紹介します。理想的には、次のような適切なタイプのオブジェクトを作成するファクトリメソッドになります。
auto CreateSelectedSpecializedType(const std::string &key);
// selected has type SpecializedTypeX
auto selected = CreateSelectedSpecializedType("SpecializedTypeX");
アドバイスをいただければ幸いです。ありがとう!
型はコンパイル時に静的に固定されるため、C ++型をランタイムデータに依存させることは不可能です。したがって、関数の戻り値の型を入力引数の値に依存させることは不可能です。したがって、おそらくあなたができる最善のことは、すべてのポリシーに共通の基本クラスを作成することです。
struct CommonBase {};
template <typename PolicyA, typename PolicyB>
class BaseType : CommonBase, PolicyA, PolicyB {};
struct MyPolicyA {};
struct MyPolicyB {};
struct OtherPolicyB {};
using SpecializedTypeX = BaseType<MyPolicyA, MyPolicyB>;
using SpecializedTypeY = BaseType<MyPolicyA, OtherPolicyB>;
CommonBase * createObjectOfType(std::string const & type) {
if (type == "SpecializedTypeX")
return new SpecializedTypeX();
if (type == "SpecializedTypeY")
return new SpecializedTypeY();
// etc...
return nullptr;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加