[英]What is the std::mem_fn type equivalent to void(MainWindow::*handler)()?
[英]What does std::_Bind<std::_Mem_fn<void (ClassName::*)()>(ClassName*)> mean? (C++)
我试图弄清楚这在我的编译器调试输出中的含义:
std::_Bind<std::_Mem_fn<void (ClassName::*)()>(ClassName*)>
如果重要,它将用作模板变量的值,并将其用作类成员变量的类型。
我知道我不确定的位是"ClassName::*"
(当您要搜索的重要位是非字母数字位时,Google 真的很 糟糕 )
参考您知道不确定的一点, ClassName::*
:
ClassName::*
是类型的一部分(但仅是part )-完整类型为void (ClassName::*)()
,这是成员函数指针的语法
特别是在这里,您有一个指向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
因此,在此特定实现中,您传递的ClassName
成员函数的std::bind
返回std::_Bind<std::_Mem_fn<void (ClassName::*)()>(ClassName*)>
这有什么用?
您可以使用std::bind
返回类型执行的一件事是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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.