2

次のようなクラス (疑似コード) を作成できるのではないかと思います。

template <class Arg1T, ... class ArgNT>
class my_class
{
public:
    my_class(Arg1T Arg1, std::string Arg1_name  ... ArgNT  ArgN, std::string ArgN_name){}
};

そして、たとえば定義を使用して、コンパイル時に提供された引数の型ごとに関数を自動生成して、(疑似コード) のようなものを取得できる場合:

template <class Arg1T, ... class ArgNT>
class my_class
{
public:
    my_class(Arg1T Arg1, std::string Arg1_name  ... ArgNT  ArgN, std::string ArgN_name){}
    // for each Arg we want to create a function like
    ArgMT   my_class_function(std::string name)
    {
       if(name == ArgM_name)
          return ArgM;
    }

};

現代のC ++でそのような/または少し似たようなことが可能ですか?それを作成する方法は?

私が言おうとしているのは、関数テンプレートからコンストラクターに提供されるクラスタイプごとに、関数を生成したいということです。そして、そのようなことをどのように行うのだろうか?ここでは、繰り返す方法を示します が、クラス引数とその型に提供されたものを繰り返す方法は?

Nつまり、クラス テンプレートの引数 ( )の量がわかればN、さまざまな型 (引数ごとに 1 つ) とN文字列 (すべてプライベート) の変数を作成できるので、Nそのセッターとゲッターの関数を作成できます (strings +変数) (コンストラクターで呼び出します)。ここでの主な問題は、同じ型を 2 回以上取得する時間を解決する方法、boost.preprocessor から大量の引数を取得する方法、同じ型をフィルタリングする方法です。

4

2 に答える 2

0

戻り値の型のみに基づいて関数をオーバーロードすることはできないため、できません。

引数名を取り、my_class_function写真から外すと、 が残りますstd::tuple<T0, ..., Tn>。次に、N 番目の引数を取得するために使用できますstd::get<N>(ただし、これは完全にコンパイル時の構成であり、実行時に N を決定することはできません)。

実行時の処理が本当に必要な場合は、N 個std::stringを超える型へのマッピングが機能する可能性があります。boost::variant

于 2011-12-02T09:51:35.863 に答える
0

この場合、一般的にインターフェースとファクトリメソッドを使用できると思います。

于 2011-12-09T20:08:57.597 に答える