C ++ 11通过推导类型参数传递成员函数调用?

时间:2013-01-04 13:54:17

标签: c++ c++11

假设我有一个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

2 个答案:

答案 0 :(得分:1)

g(x.h); // WRONG

此操作失败,因为x.h不是普通函数,它是this绑定到&x的函数。

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

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

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

lambda可能会更快一点。

答案 1 :(得分:1)

使用std::mem_fn

X x = ...;

g(mem_fn(&X::h), x);