Roo*_*kie 5 c++ visual-c++ c-preprocessor
我可以选择使用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
Run Code Online (Sandbox Code Playgroud)
注意:我没有C++ 11或者任何东西,只有好的旧C++.
Naw*_*waz 11
在C++ 11中,您可以使用std::conditional和std::is_sameas:
#define GL_MYTYPE std::conditional \
< std::is_same<MYTYPE,float>::value, \
GL_FLOAT, \
GL_DOUBLE \
>::type
Run Code Online (Sandbox Code Playgroud)
在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; };
Run Code Online (Sandbox Code Playgroud)
和
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; };
Run Code Online (Sandbox Code Playgroud)
请注意,实现conditional取自网站本身.
你可以这样做:
#define MYFLOAT
#ifdef MYFLOAT
typedef float MYTYPE;
#define GL_MYTYPE GL_FLOAT // used for vertex array parameters.
#else
typedef double MYTYPE;
#define GL_MYTYPE GL_DOUBLE
#endif
Run Code Online (Sandbox Code Playgroud)
您需要定义MYFLOAT是否要使用float,或者省略它以使用double。
PS:保留在 ind 中,这不是在编译时评估,而是在预处理时评估。