Gif*_*guy 3 c++ conditional substitution c-preprocessor
我的位置可以大大提高我的代码的清晰度和维护需求.
我正在寻找的是这样的:
#define MY_MACRO(arg) #if (arg)>0 cout<<((arg)*5.0)<<endl; #else cout<<((arg)/5.0)<<endl; #endif
Run Code Online (Sandbox Code Playgroud)
这里的想法:
预处理器根据宏参数的编译时(常量)值替换不同的代码行.当然,我知道这种语法不起作用,因为它#被视为string-ize运算符而不是标准#if,但我认为这证明了我试图实现的预处理器功能.
我知道我可以if在那里放一个标准语句,然后编译器/运行时将检查该值.但是这对于应用程序来说是不必要的工作,当arg总是传递一个常量值时,10.8或者-12.5只需要在编译时进行评估.
这个数字运算应用程序的性能需求要求尽可能消除所有不必要的运行时条件,并且已经使用了许多常量值和宏(代替变量和函数)来实现这一点.在不必将预处理器代码与实际if条件混合的情况下继续这种趋势的能力将使这更加清晰 - 当然,代码清洁是使用宏时最大的问题之一,尤其是在这个级别.
简单,使用真正的C++:
template <bool B> void foo_impl (int arg) { cout << arg*5.0 << endl; }
template < > void foo_impl<false>(int arg) { cout << arg/5.0 << endl; }
template <int I> void foo ( ) { foo_impl< (I>0) >(I); }
Run Code Online (Sandbox Code Playgroud)