C++ 与void(主窗口::*handler)()等价的std::mem_fn类型是什么?

C++ 与void(主窗口::*handler)()等价的std::mem_fn类型是什么?,c++,c++11,C++,C++11,我有一个功能: std::function<void(sp_session*)> test(void(MainWindow::*handler)()) { return ...; } 所以我不确定我做错了什么。C++11绑定器函数家族(mem\u fn,bind)返回的确切类型未指定,这意味着它是一个实现细节,您不应该关心它 §20.8.9[功能绑定] 模板 未指定绑定(F&&,BoundArgs&&& §20.8.10[函数memfn] 模板 unspecifiedmem

我有一个功能:

std::function<void(sp_session*)> test(void(MainWindow::*handler)())
{
    return ...;
}

所以我不确定我做错了什么。

C++11绑定器函数家族(
mem\u fn
bind
)返回的确切类型未指定,这意味着它是一个实现细节,您不应该关心它

§20.8.9[功能绑定]

模板

未指定
绑定(F&&,BoundArgs&&&

§20.8.10[函数memfn]

模板

unspecified
mem_fn(R T::*pm)

“变通方法”:使用模板

template<class F>
std::function<void(sp_session*)> test(F handler)
{
    return ...;
}
模板
std::功能测试(F处理程序)
{
返回。。。;
}

C++11活页夹函数系列(
mem\u fn
bind
)返回的确切类型未指定,这意味着它是一个实现细节,您不应该关心它

§20.8.9[功能绑定]

模板

未指定
绑定(F&&,BoundArgs&&&

§20.8.10[函数memfn]

模板

unspecified
mem_fn(R T::*pm)

“变通方法”:使用模板

template<class F>
std::function<void(sp_session*)> test(F handler)
{
    return ...;
}
模板
std::功能测试(F处理程序)
{
返回。。。;
}

std::mem\u fn
不是您要找的类型。
您需要的类型是将实例作为参数的
std::function

std::function<void(sp_session*)> test(std::function<void(MainWindow *)> handler)
在新功能中,您可以执行以下操作:

handler(instance);

std::mem\u fn
不是您要找的类型。
您需要的类型是将实例作为参数的
std::function

std::function<void(sp_session*)> test(std::function<void(MainWindow *)> handler)
在新功能中,您可以执行以下操作:

handler(instance);

mem\u fn
是函数,不是类型,不能这样使用。
mem\u fn
是函数,不是类型,不能这样使用。@Leith:
mem\u fn
是绑定函数,允许您将成员指针转换为函数对象,然后可以通过
std::function
存储。它是std::bind(&T::member,_1,_2,_3,…)
的简写形式,只是您不需要知道将有多少个参数。使用
mem\u fn
,它只是
std::mem\u fn(&T::member)
@Leith:
mem\u fn
是一个绑定函数,允许您将成员指针转换为函数对象,然后由
std::function
存储。它是std::bind(&T::member,_1,_2,_3,…)
的简写形式,只是您不需要知道将有多少个参数。使用
mem\u fn
,它只是
std::mem\u fn(&T::member)