gpt4 book ai didi

c++ - std::_Bind(ClassName*)> 是什么意思? (C++)

转载 作者:搜寻专家 更新时间:2023-10-31 00:31:00 24 4
gpt4 key购买 nike

我试图弄清楚这在我的编译器调试输出中意味着什么:

std::_Bind<std::_Mem_fn<void (ClassName::*)()>(ClassName*)>

如果重要的话,它被用作模板变量的值,该模板变量被用作类成员变量的类型。

知道我不确定的一点是“ClassName::*”(谷歌真的 不好 当您要搜索的内容的重要部分是非字母数字部分时)

最佳答案

关于您知道您不确定的部分,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返回:

Return value
A function object of unspecified type T, for which std::is_bind_expression<T>::value == true

所以在这个特定的实现中,std::bind对于 ClassName您传递的成员函数返回 std::_Bind<std::_Mem_fn<void (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()

关于c++ - std::_Bind<std::_Mem_fn<void (ClassName::*)()>(ClassName*)> 是什么意思? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35183953/

24 4 0