2016-11-20 12 views
0

マクロ関数にブール変数に基づいて変数型を定義しようとしていますが、コンパイラエラーが発生します。マクロ関数の引数に基づいたマクロの出力タイプ

#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; 
} 
関連する問題