2016-11-20 41 views
0

我想基于一个布尔变量定义我的变量类型进入我的宏函数,但我得到编译器错误。基于宏函数参数的C++宏输出类型

#define myImageType(depthImage) ((depthImage)==0 ? int : double) 

int main() 
{ 
bool inMilimeter = true; 
myImageType(inMilimeter) pixelIntensity; 
} 
+0

三元比较运算符不被预处理器处理。忘记这种方法。一个模板也许。 –

回答

2

您将需要使用std::conditional

由于类型必须在编译时决定,布尔也必须是常量表达式:

#include <type_traits> 

#define myImageType(depthImage) \ 
std::conditional<depthImage, int, double>::type 

int main() { 
    constexpr bool inMilimeter = true; 
    myImageType(inMilimeter) pixelIntensity; 
}