随着参考位你知道你不知道,ClassName::*
:
ClassName::*
是一个类型的一部分(但只有部分) - 完整的类型是void (ClassName::*)()
,这是一个member function pointer
语法具体地在这里,有一个指针指向一个ClassName
成员函数,它返回void
和没有参数。
void (ClassName::*)()
^ ^ ^
| | |
return type | |
(void) | |
| |
class type ------+ |
(ClassName) |
|
parameter list ---------+
(no parameters)
至于类型,std::_Bind<std::_Mem_fn<void (ClassName::*)()>(ClassName*)>
的其余部分,这是调用std::bind
的内部表示的std::bind
签名如下:
template< class F, class... Args >
/*unspecified*/ bind(F&& f, Args&&... args);
注意不明回报类型 - 这意味着它由实施决定什么std::bind
返回:
返回值
未指定类型T的函数对象,这std::is_bind_expression<T>::value == true
所以在这个特定的实现,std::bind
你已经通过了回报std::_Bind<std::_Mem_fn<void (ClassName::*)()>(ClassName*)>
的ClassName
成员函数这有用吗?
一两件事你可以用std::bind
返回类型要做的就是捕捉它在std::function
的特别std::function
类型的问题在这里是std::function<void()>
。
ClassName obj;
std::function<void()> func = std::bind(&ClassName::someFunction, &obj);
func(); // this actually calls obj.someFunction()
我猜测与'this'指针作为参数所捕获的成员函数,东西的'的std ::绑定(类:: OBJ,&MyObj中)编译器形成的;' –
我要去采取猜测'_Bind'是'std :: bind'返回的实现类型,'_Mem_fn'也是类似的。我猜这是微软的。 – chris
这是有道理的,因为我正在使用std :: bind,但是我绑定的所有函数都有一个int返回值,所以void从哪里来? – Illiander