2016-11-20 83 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; 
}