- 作者: 雪山肥鱼
- 时间:20220226 21:22
- 目的: conditional
C++ 11 引入的类模板,表示一种编译期的分支逻辑
template<bool b, class T, class U>
struct myConditional {
using type = T;
};
template <class T, class U>
struct myConditional<false, T, U> {
using Type = U;
};
int main(int argc, char ** argv) {
return 0;
}
bool 值为 true, 则 type 类型为T, 否则为U.
#include <iostream>
using namespace std;
int main(int argc, char ** argv) {
std::conditional<true, int, double>::type tmp1;
std::conditional<false, int, double>::type tmp2;
cout << "tmp1:" << typeid(decltype(tmp1)).name() << endl;//int
cout << "tmp2:" << typeid(decltype(tmp2)).name() << endl;//double
return 0;
}
举例:
需求,定义一个 名字教 tgvar的变量,根据常量的值不同。其类型也就不同。
constexpr int j = 135; //假设给进去35
std::conditional<
(j > 100), double, //值>100,tsvar是double,
std::conditional<
(j > 80), float, //值在80-100之间,那么tsvar是float类型。
std::conditional<
(j > 40), int, //值在40-80之间,那么tsvar是int类型。
char //值不超过40,tsvar是char类型
>::type
> ::type
>::type tsvar;
cout << "tsvar的类型为:" << typeid(decltype(tsvar)).name() << endl;
return 0;