繁体   English   中英

什么是std :: _ Bind <std::_Mem_fn<void (ClassName::*)()> (ClassName *)&gt;是什么意思? (C ++)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM