1

我想根据 a 的值进行预处理器定义typedef

这个想法是检查index_type_t并生成适当的INDEX_TYPE_GL定义。

以下内容无法按预期工作。

typedef uint32_t index_type_t;

#ifdef INDEX_TYPE_GL
#undef INDEX_TYPE_GL
#endif

#if (index_type_t == uint8_t)
#define INDEX_TYPE_GL   GL_UNSIGNED_BYTE
#elif (index_type_t == uint32_t)
#define INDEX_TYPE_GL   GL_UNSIGNED_INT
#elif (index_type_t == uint16_t)
#deine INDEX_TYPE_GL    GL_UNSIGNED_SHORT
#endif

请注意uint8_t,uint16_t和在其他地方uint32_t是分开的typdefs, that GL_UNSIGNED_BYTEetc. 是整数值,而不是类型。

4

1 回答 1

5

枚举样式:

template<typename T> struct IndexTypeGL {};
template<> struct IndexTypeGL<uint8_t>  { enum {value = GL_UNSIGNED_BYTE }; };
template<> struct IndexTypeGL<uint16_t> { enum {value = GL_UNSIGNED_SHORT}; };
template<> struct IndexTypeGL<uint32_t> { enum {value = GL_UNSIGNED_INT  }; };

#define INDEX_TYPE_GL  IndexTypeGL<index_type_t>::value

“静态常量”样式

template<typename T> struct IndexTypeGL {};
template<> struct IndexTypeGL<uint8_t>  { static constexpr int value = GL_UNSIGNED_BYTE; };
template<> struct IndexTypeGL<uint16_t> { static constexpr int value = GL_UNSIGNED_SHORT;};
template<> struct IndexTypeGL<uint32_t> { static constexpr int value = GL_UNSIGNED_INT;  };
于 2013-08-19T11:23:58.187 回答