0

私は C++11 を学習しようとしており、テキストファイルを文字列のベクトルに読み取り、そのベクトルを関数に渡し、ユーザーに適用したい関数の名前を選択するように求めるプログラムの作成を開始しました。ベクター。

C++ 11 のような関数マップがあります。

std::map<std::string, void(*)(std::vector<std::string>& v)> funcs
{
    {"f1", f2},
    {"f2", f2},
};

そして、次の関数で呼び出します。

void call_function(std::vector<std::string>& v)
{
    std::string func;
    std::cout << "Type the name of the function: ";
    std::cin >> func;
    std::cout << "Running function: " << func << "\n";
    funcs[func](v);
}

2 つの関数の例は次のとおりです。

void f1(std::vector<std::string>& v)
{
    std::cout << "lol1";
}

void f2(std::vector<std::string>& v)
{
    std::cout << "lol2";
}

現時点では、関数マップから呼び出して文字列のベクトルを関数に渡すことができますが、さまざまな型の可変数の引数を渡すことができるようにしたいと考えています。私ができるようにしたいのは、整数と文字列の引数を受け入れるように関数を変更することですが、すべての関数が同じ量の引数または同じ型の引数を受け入れるわけではありません。

たとえば、マップ内の 1 つの関数が引数として文字列と整数を受け入れられるようにする一方で、別の関数が引数として 1 つの整数または 1 つの文字列のみを受け入れるようにしたい場合があります。これまでのところ、マップを介して可変引数を関数に渡す手段を見つけることができませんでした。

これは std::map で可能ですか? 私はC++ 11の可変個引数テンプレートも調べていましたが、あまりよく理解していません。

誰でも洞察を提供できますか?

4

1 に答える 1