1

これは、5つのオブジェクトと25の関数を持つC++クラスです。実行時に、オブジェクトと関数の名前をパラメーターとして渡し、渡されたオブジェクトに指定されたメソッドを呼び出させたいと思います。

のようなものです

void actionToBetaken(object,string method_name)
 {
       object.method_name();
 }

C ++でどのように可能ですか?

4

1 に答える 1

9

これは通常、関数ポインタを使用して行われます。

template <typename T, typename U>
void f(T &object, U (T::*method)())
{
   (object.*method)();
}

これは、メソッドが引数を取らないことを前提としています。次のようにして、引数を使用してメソッドを渡すことができます。

template <typename T, typename U, typename... Args>
void f(T &object, U (T::*method)(Args...), Args&&... args)
{
   (object.*method)(std::forward<Args>(args)...);
}

int main()
{
    T t;

    f(t, &T::f, 5); // calls t.f(5)
}

std::functionまたはstd::bind、この種の機能を使用することもできます。

于 2013-03-16T13:38:35.023 に答える