C预处理器替换和连接

时间:2014-06-09 20:53:08

标签: c++ concatenation c-preprocessor stringification

我正在尝试定义

#define tokenBits 32
typedef inttokenBits_t Token;
typedef int#tokenBits#_t Token;
typedef int##tokenBits##_t Token;
typedef int###tokenBits###_t Token;
const tokenBase=numeric_limits<Token>::min()

我应该如何定义才能获得

typedef int32_t Token;

#define的确切编写方式在哪里(我发现文本都没有给出完整的视角)。

3 个答案:

答案 0 :(得分:3)

我的建议:

#define CONCAT(a,b,c) a ## b ## c
#define MYINT_TYPE(tokenBits) CONCAT(int, tokenBits, _t)

typedef MYINT_TYPE(tokenBits) Token;

答案 1 :(得分:1)

使用宏:

#define BIT_AWARE_TYPEDEF(bitness, type, result) typedef type##bitness##_t result;

可配置性较低:

#define TOKEN(bitness) typedef int##bitness##_t Token;

答案 2 :(得分:0)

使用模板:

template <std::size_t N> struct sized_int;

template<> struct sized_int<32> { using type = int32_t; };
template<> struct sized_int<64> { using type = int64_t; };

#define tokenBits 32

using Token = typename sized_int<tokenBits>::type;