#ifdefだって置き換えられる
#defineによる定数やマクロの置き換えはconst, constexpr等で可能です。(全部ではないですが) #ifdefの置き換えは可能なのでしょうか?
class Calc{ public: void Execute(){ int a = 1; int b = 2; int c = a + b; #ifdef DEBUG std::cout << c; #endif } }; void main() { Calc a; a.Execute(); }
templateの特殊化を使えば可能です。
struct Debug{}; struct Release{}; // ポリシーの設定 typedef Debug Policy; class Calc{ // 条件によって実行内容を変更させる関数を定義 template<class T> void DebugPrint(int); public: void Execute(); }; // Debugポリシーが設定されている場合はプリント template<> void Calc::DebugPrint<Debug>(int a){ std::cout << a; } // Debugポリシーが設定されていない場合は何もしない template<class T> void Calc::DebugPrint(int){} void Calc::Execute() { int a = 1; int b = 2; int c = a + b; // 呼び出し DebugPrint<Policy>(c); } void main() { Calc a; a.Execute(); }