C++中std::conditional的使用說(shuō)明
std::conditional的使用
今天在項(xiàng)目中發(fā)現(xiàn)C++11新特性中的std::conditional關(guān)鍵詞,經(jīng)過(guò)查詢資料,學(xué)習(xí)到了其中含義。
具體用法
std::conditional<表達(dá)式, 類型1, 類型2>
具體理解為
如果表達(dá)式為真則定義的變量為類型1,如果表達(dá)式為假則定義的變量為類型2。
如:
typedef typename std::conditional<true, int, double>::type Type1;// => int Type1
則Type1的類型為int類型
以下顯示了更多的例子
#include <iostream> #include <type_traits> #include <typeinfo> int main() { typedef typename std::conditional<true, int, double>::type Type1; typedef typename std::conditional<false, int, double>::type Type2; typedef typename std::conditional<sizeof(int) == sizeof(double), int, double>::type Type3; std::cout << typeid(Type1).name() << std::endl; // 輸出:i (代表int類型) std::cout << typeid(Type2).name() << std::endl; // 輸出:d (代表double類型) std::cout << typeid(Type3).name() << std::endl; // 輸出:d (代表double類型) Type1 a = 3.1; // 由于Type1的類型為int所以3.1被強(qiáng)制轉(zhuǎn)換為3 Type2 b = 4.2; // Type2的類型為double,4.2保存在變量b中 std::cout << a + b << std::endl; // 3+4.2,最終輸出為7.2 }
利用std::conditional實(shí)現(xiàn)變量的多類型
//std::conditional<bool, A, B>::type const bool kEnableOffsetRender = false; class LoginDialog : public std::conditional<kEnableOffsetRender, ui::WindowImplBase, nim_comp::ShadowWndBase>::type { public: //todo }; /* if(kEnableOffsetRender) { type = ui::WindowImpBase; } else { type = nim_comp::ShadowWndBase; } */
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單三子棋游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09C++ explicit構(gòu)造函數(shù)實(shí)例解析
這篇文章主要介紹了C++ explicit構(gòu)造函數(shù),需要的朋友可以參考下2014-07-07C語(yǔ)言 深入解讀數(shù)據(jù)結(jié)構(gòu)之堆的實(shí)現(xiàn)
堆就是用數(shù)組實(shí)現(xiàn)的二叉樹(shù),所以它沒(méi)有使用父指針或者子指針。堆根據(jù)“堆屬性”來(lái)排序,“堆屬性”決定了樹(shù)中節(jié)點(diǎn)的位置2021-11-11linux根據(jù)pid獲取進(jìn)程名和獲取進(jìn)程pid(c語(yǔ)言獲取pid)
status文件,第一行的Name即為進(jìn)程名,C程序?qū)崿F(xiàn)根據(jù)PID獲取進(jìn)程名和根據(jù)進(jìn)程名獲取PID,大家參考使用吧2013-12-12