typedef 可以用于定义新类型,比如:
typedef int NUM;
typedef char* CPTR;
typedef std::vector<int> VINT;
typedef int INTS[10];
但有时候需要根据条件进行类型定义,比如下面这种情况
struct test_struct
{
char c;
int i;
};
struct test_struct_2
{
char c;
double d;
};
if( flag )
typedef bb::test_struct AAA;
else
typedef bb::test_struct_2 AAA;
AAA a;
编译会报错 error: ‘AAA’ was not declared in this scope, 这个时候就可以用std::conditional
来做, 有两种方式:
#include <type_traits>
using AAA = typename std::conditional<
flag == true,
bb::test_struct,
bb::test_struct_2 >::type;
or
typedef std::conditional<
flag,
bb::test_struct,
bb::test_struct_2 >::type AAA;
获取变量的类型用tpyeid
,
#include <typeinfo>
std::cout << typeid(a).name() << std::endl;