我提供了使用 float 或 double 类型编译程序的选项,但是有一个问题:我需要手动设置 GL_FLOAT 或 GL_DOUBLE,因为我不知道如何执行以下操作:
typedef float MYTYPE;
#if MYTYPE == float
#define GL_MYTYPE GL_FLOAT // used for vertex array parameters.
#else
#define GL_MYTYPE GL_DOUBLE
#endif
注意:我没有 C++11 或其他任何东西,只有很好的旧 C++。
最佳答案
在 C++11 中,您可以使用 std::conditional
和 std::is_same
作为:
#define GL_MYTYPE std::conditional \
< std::is_same<MYTYPE,float>::value, \
GL_FLOAT, \
GL_DOUBLE \
>::type
在 C++03 中,您可以自己实现这些功能:
template<bool B, class T, class F>
struct conditional { typedef T type; };
template<class T, class F>
struct conditional<false, T, F> { typedef F type; };
和
template<class T, class U>
struct is_same { static const bool value = false; };
template<class T>
struct is_same<T, T> { static const bool value = true; };
请注意,conditional
的实现取自 site本身。
关于c++ - 如何在编译时检查类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10913728/