std::conditional的用法

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 

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 

std::cout << typeid(a).name() << std::endl;

你可能感兴趣的:(C++)