![](/img/trans.png)
[英]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.