我想根据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
,GL_UNSIGNED_BYTE
等是整数值,而不是类型。
答案 0 :(得分: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
“静态constexpr”风格
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; };