C普拉斯普拉斯耶標(biāo)準(zhǔn)委員會的無上尊寵的元老們是不是晚年耍得很high耶
所謂耍流氓,耍,玩弄,流氓,不忍淬讀的技巧
lambda
lambda
[] // 沒有定義任何變量。使用未定義變量會引發(fā)錯誤。
[x, &y] // x以傳值方式傳入(默認(rèn)),y以引用方式傳入。
[&] // 任何被使用到的外部變量都隱式地以引用方式加以引用。
[=] // 任何被使用到的外部變量都隱式地以傳值方式加以引用。
[&, x] // x顯式地以傳值方式加以引用。其余變量以引用方式加以引用。
[=, &z] // z顯式地以引用方式加以引用。其余變量以傳值方式加以引用。
傳返回值:
auto Foo = []()-> Type
{ return Value;}
函數(shù)聲明了返回值類型,但是似乎可以不返回值
thread
<占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述>
<占位項(xiàng)1>
<占位項(xiàng)2>
template
<占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述>
<占位項(xiàng)1>
<占位項(xiàng)2>
bind
provides support for partial function application, i.e. binding arguments to functions to produce new functions.
丫就一lambda,
參考cplusplus的示例,
參考cppreference的示例。
bind上2個玩意后,就產(chǎn)生了一個新玩意,這個新玩意可以拿來當(dāng)一般方法來訪問了。
功效
特化函數(shù)參數(shù)組裝成一個新函數(shù),例如讓第二個形參固定,特化嘛
強(qiáng)制轉(zhuǎn)換函數(shù)返回值,淫家本來返回float,搞個bind(fun, _1),返回int了,硬是掰彎了
暴露類成員方法,用bind產(chǎn)生一個新方法,這樣可以用類的某個對象call新方法了
auto newfun = std::bind (&MyClass::foo,_1)
MyClass obj1,obj2;
如此,可以這樣搞了:
newfun(obj1);newfun(obj2);
爽了2把哈?
總結(jié)下bind類成員方法的規(guī)則:
bind(成員方法的坑,類對象的坑,形參1的坑,新參2的坑)
bind(&MyClass::memberfun,&obj或者_(dá)1,常量或_2,常量或_3)
cplusplus示例中fn_five()產(chǎn)生的調(diào)用堆棧
my_divide()
TestClient.exe!std::_Invoker_functor::_Call
TestClient.exe!std::invoke
TestClient.exe!std::_Invoke_ret
TestClient.exe!std::_Call_binder,std::tuple<> >
TestClient.exe!std::_Binder::operator()<>
function
屁話不多說了,直接看
cppreference示例。
還可以參考:
http://www.cplusplus.com/reference/functional/function/
接2句廢話,可以這樣將類成員方法和對象綁定成一個新方法,是不是在處理網(wǎng)絡(luò)消息協(xié)議時很有用哇
using std::placeholders::_1;
// store a call to a member function and object
std::function f_add_display2 = std::bind(&Foo::print_add, foo, _1);
f_add_display2(2);
// store a call to a member function and object ptr
std::function f_add_display3 = std::bind(&Foo::print_add, &foo, _1);
f_add_display3(3);
placeholders
This namespace declares an unspecified number of objects: _1,_2,_3,..., which are used to specifyplaceholdersin calls to functionbind.
啟用placeholders
using namespace std::placeholders; // adds visibility of _1, _2, _3,...
http://www.cplusplus.com/reference/functional/placeholders/
forward
<占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述>
<占位項(xiàng)1>
<占位項(xiàng)2>
小流氓
<占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述>
<占位項(xiàng)1>
<占位項(xiàng)2>
小流氓
<占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述>
<占位項(xiàng)1>
<占位項(xiàng)2>
小流氓
<占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述占位描述>
<占位項(xiàng)1>
<占位項(xiàng)2>