簡體   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