完整**位置
// 測試**
#include
"wtuple.h"
#include
intmain()
std::tuple用以當做泛化的pair使用,其構建原理非常值得研究;
實現原理:
1.通過對自身泛化模板的「遞迴繼承「,以實現記憶體結構上的巢狀;
例如
std::tuple<
char
,short
,int
,double
>將繼承自
①.std::tuple <
short
,int
,double
>
(繼續「遞迴」繼承)
②.std::tuple <
int,
double
>
③.std::tuple <
double
>
④.std::tuple <
>
// tuple原始版本
template
<
typename..
. __args_type>
class
tuple
;// tuple無參
template
<
>
class
tuple
<
>
virtual
~tuple()
};// tuple的帶參偏特化
template
<
typename __this_type,
typename..
. __args_type>
class
tuple
<__this_type, __args_type ...
>
:public tuple<__args_type ...
>
virtual
~tuple()
__this_type get_value()
public
:// 每一層繼承的節點引數剝離
// 將每一節點內容儲存至其中
__this_type value_;
};
2.取出tuple中的值,通過對tuple下標的展開,得到對應繼承的tuple原型,即可呼叫介面獲取對應的節點value_
例如std::tuple應用std::get<1>時將展開到std::tuple型別,以此型別轉換原tuple物件,即可呼叫get_value介面;
template
<
int n,
typename..
. __args_type>
auto
get(tuple<__args_type ...
>
& tu)
通過上述中的element模板展開tuple模板,萃取其中的基類tuple型別,原始碼如下:
// element原始版本
template
<
int n,
typename..
. __args_type>
struct element;
// n > tuple size時get出錯
template
<
int n>
struct element>>
;// tuple展開模板
template
<
int n,
typename __this_type,
typename..
. __args_type>
struct element>>
:public element1, tuple<__args_type ...
>>
;// 展開到對應節點
template
<
typename __this_type,
typename..
. __args_type>
struct element<
0, tuple<__this_type, __args_type ...
>>
;
WCF初接觸實作 一
我們通過實現乙個簡單的示例來對wcf有個直觀而淺顯的認識,希望對初次涉及wcf的朋友有所幫助。可以簡單地認為wcf程式分為4部分 契約 服務 宿主 客戶端。我們通過乙個例子來逐步完成各部分,示例程式中,客戶端可以獲取乙個資訊列表,列表中每一項包括id 值 讀值時刻 狀態 狀態變動時刻。這裡我用的是v...
簡單實現乙個進度條並剖析原理
我們要實現關於乙個進度條,我們的想法是採用for迴圈的方式,所以對於這個進度條,我們需要從下面幾個問題來一一看待問題。這兩個符號,乙個叫做回車,乙個叫做換行,好多人對這兩個分不清,所以我們在這裡需要介紹一下。在最早的時候,只有打字機的時候,人們在每行的後面加上兩個表示結束的字元,乙個叫做回車,它把打...
hadoop 一 深度剖析hdfs原理
在配置hbase集群將 hdfs 掛接到其它映象盤時,有不少困惑的地方,結合以前的資料再次學習 大資料底層技術的三大基石起源於google在2006年之前的三篇 gfs map reduce bigtable,其中gfs map reduce技術直接支援了apache hadoop專案的誕生,big...