2013-02-08 82 views
0

在C++我有這樣的宏:在haxe中是否有類似宏的C++機制?

#ifdef DEBUG 
    #define dbgAssert(condition, message)/ 
    if(!(condition)){ implementation.Assert(message); } 
#else 
    #define dbgAssert(condition, message) 
#endif 

這種方法是有效的,就好像我們在調試模式不是特別當一些條件可以對CPU特別重的條件從來沒有測試。

有沒有一種方法可以在Haxe中實現這種類型的內襯?

這是一個非常簡單的例子,因爲有一些宏有十幾個條件定義(取決於多個參數)我無法在整個地方有效地維護多餘的重定義。

這取決於水平的略微更有趣的系統,讓我始終測試最簡單的條件,並添加heavyer測試:

#if 4 == ASSERT4LEVEL 
    #define lvlAssert4(conditionlvl1, conditionlvl2, conditionlvl3, conditionlvl4, message)/ 
    myAssert((conditionlvl1) && (conditionlvl2) && (conditionlvl3) && (conditionlvl4), message) 
#elif 3 == ASSERT4LEVEL 
    #define lvlAssert4(conditionlvl1, conditionlvl2, conditionlvl3, conditionlvl4, message)/ 
    myAssert((conditionlvl1) && (conditionlvl2) && (conditionlvl3), message) 
#elif 2 == ASSERT4LEVEL 
    #define lvlAssert4(conditionlvl1, conditionlvl2, conditionlvl3, conditionlvl4, message)/ 
    myAssert((conditionlvl1) && (conditionlvl2), message) 
#else 
    #define lvlAssert4(conditionlvl1, conditionlvl2, conditionlvl3, conditionlvl4, message)/ 
    myAssert((conditionlvl1), message) 
#endif 

我怎麼能複製,而不執行情況這種行爲?

回答

2

Frabbits answer對於這種情況是正確的,但這裏也是宏版本。

@:macro static public function dbgAssert(condition, message) { 
    #if debug 
    return macro if (!($condition)) { implementation.Assert($message); } 
    #else 
    return macro {}; 
    #end 
} 
3

您可以根據調試標誌創建2個不同的功能。發佈函數應該是內聯的,不應該做任何事情。

class Debug { 
     #if debug 
     public static function assert (e:Bool) { 
      if (!e) throw "assert"; 
     } 
     #else 
     public static inline function assert (e:Bool) { 
      return; 
     } 
     #end 

    } 

你還應該看看haxe宏,它可以在編譯期間做很多強大的事情。

+0

其實在這種情況下測試條件... – Coyote

相關問題