c++11的包擴充套件,記錄一下**吧,採用萬能引用,萬能引用再配合std::forward又是完美**。我個人還是覺得能清晰表達**盡量不要用這麼奇奇怪怪的語句吧?完美**可以考慮,確實降低的拷貝的成本。
今天在github看乙個人執行緒池的demo,發現他的執行緒池裡充滿了這些奇奇怪怪的寫法,明明是乙個普普通通的生產者消費者的模型,搞出來了好多奇奇怪怪的東西,要搞得這麼複雜?又重新翻了下effective modern c++學了一下包擴充套件
void
fun4()
template
<
typename..
.args,
typename t>
void
fun4
( t&& t,args&&..
.args)
template
<
typename promise,
typename..
.args>
decltype
(auto
)fun3
(promise&& p,args&&..
.args)
//->decltype(p.get_future())
/*兩種fun3的寫法
*templateauto fun3(promise&& p,args&& ...args)
->decltype(p.get_future()) **/
intmain()
在附上乙個包擴充套件和完美**組合的例子吧,因為我覺得一行一行cout太麻煩了,c語言的print也沒麻煩,自己寫了乙個簡易的print函式
#include
using
namespace std;
// 要有乙個函式的出口
template
<
typename t>
void
print
(const t&& t)
template
<
typename t,
typename..
.args>
void
print
(const t&& arg,args .
..args)
template
<
typename..
.args>
void
print
(args .
..args)
intmain()
c++17版本的,更加簡短了,也不需要函式出口了
template
<
typename..
.args>
constexpr
void
print
(args&&..
.args)
C 11 擴充套件的friend語法
c 98的friend 參見很久以前的隨筆 友元 c 11擴充套件的friend 直接用 說明,示例如下 1 class poly 2typedef poly p 34 class lilei 5 89class jim 10 1314 class hanmeimei 15 宣告了3個型別 lile...
c 11之函式引數包展開
本文略帶總結性,參考 泛化之美 c 11可變模版引數的妙用 用下面的函式可以實現查詢引數包的個數 templateunsigned int length args.args 呼叫 length 1,hello c 11 返回4,4個引數3.1注意,遞迴展開需要考慮爆棧的情況。說到這裡,ubuntu ...
C (11) 包含和繼承關係
一 包含關係 當乙個類構建的物件為另乙個類的成員物件時 當乙個型別包含另乙個物件時,本類沒有構造,析構,拷貝,賦值,但成員類有這些函式,本類就可以進行自己的合成因此來調動成員物件的函式。要和成員物件的行為保持一致。class object object object const object obj...