假设我有一个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
答案 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);