C++中std::conditional的使用說明
更新時間:2022年07月11日 14:46:40 作者:年年年年年
這篇文章主要介紹了C++中std::conditional的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
std::conditional的使用
今天在項目中發(fā)現(xiàn)C++11新特性中的std::conditional關(guān)鍵詞,經(jīng)過查詢資料,學(xué)習(xí)到了其中含義。
具體用法
std::conditional<表達式, 類型1, 類型2>
具體理解為
如果表達式為真則定義的變量為類型1,如果表達式為假則定義的變量為類型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被強制轉(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實現(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;
}
*/以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++ explicit構(gòu)造函數(shù)實例解析
這篇文章主要介紹了C++ explicit構(gòu)造函數(shù),需要的朋友可以參考下2014-07-07
C語言 深入解讀數(shù)據(jù)結(jié)構(gòu)之堆的實現(xiàn)
堆就是用數(shù)組實現(xiàn)的二叉樹,所以它沒有使用父指針或者子指針。堆根據(jù)“堆屬性”來排序,“堆屬性”決定了樹中節(jié)點的位置2021-11-11
linux根據(jù)pid獲取進程名和獲取進程pid(c語言獲取pid)
status文件,第一行的Name即為進程名,C程序?qū)崿F(xiàn)根據(jù)PID獲取進程名和根據(jù)進程名獲取PID,大家參考使用吧2013-12-12

