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
g(x.h); // WRONG

这失败了,因为x.h它不是一个普通函数,它是一个this绑定到&x.

添加缺少的绑定有两种可能性:

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

如果您想h使用 的副本进行调用,则将lambda 中的x更改为[&](类似地,删除)。[=]std::ref

lambda 可能会更快一些。

于 2013-01-04T13:58:52.580 回答
1

使用std::mem_fn

X x = ...;

g(mem_fn(&X::h), x);
于 2013-01-04T14:04:58.813 回答