C 11包擴充套件

2021-10-10 06:16:15 字數 1483 閱讀 6267

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...