1

C++11関数があるとします。

template<class F, class... Args>
void g(F&& f, Args&&... args)
{
    /* ... */

    forward<F>(f)(forward<Args>(args)...);

    /* ... */
}

そして私はクラスを持っていますX

struct X
{
    void h();
}

h特定のXインスタンスの呼び出しをxパラメーターとして渡す方法はありf, argsますgか?

X x = ...;

g(x.h);  // WRONG
4

2 に答える 2

1

使用std::mem_fn

X x = ...;

g(mem_fn(&X::h), x);
于 2013-01-04T14:04:58.813 に答える
1
g(x.h); // WRONG

x.hは単純な関数ではなく、にthisバインドされた関数であるため、これは失敗します&x

不足しているバインディングを追加するには、次の2つの可能性があります。

g([&](){x.h();}); // lambda
g(std::bind(&X::h, std::ref(x))); // std::bind

hのコピーを使用して呼び出す場合は、ラムダ内のをにx変更します(同様に、を削除します)。[&][=]std::ref

ラムダは少し速くタフかもしれません。

于 2013-01-04T13:58:52.580 に答える