Macros C+有机制吗+;像haxe中的宏? 在C++中,我有宏: #ifdef调试 #定义dbgAssert(条件、消息)/ if(!(条件)){implementation.Assert(message);} #否则 #定义dbgAssert(条件、消息) #恩迪夫
这种方法是有效的,因为如果我们不在调试模式下,就永远不会测试条件,特别是当某些条件可能对CPU造成特别大的负担时 有没有办法在Haxe中实现这种类型的单行程序 这是一个非常简单的例子,因为有些宏有十几个条件定义(取决于多个参数),我无法有效地维护所有冗余的重新定义 这是一个稍微有趣的系统,它允许我始终测试最简单的条件,并根据级别添加更重的测试:Macros C+有机制吗+;像haxe中的宏? 在C++中,我有宏: #ifdef调试 #定义dbgAssert(条件、消息)/ if(!(条件)){implementation.Assert(message);} #否则 #定义dbgAssert(条件、消息) #恩迪夫,macros,compilation,haxe,conditional-compilation,Macros,Compilation,Haxe,Conditional Compilation,这种方法是有效的,因为如果我们不在调试模式下,就永远不会测试条件,特别是当某些条件可能对CPU造成特别大的负担时 有没有办法在Haxe中实现这种类型的单行程序 这是一个非常简单的例子,因为有些宏有十几个条件定义(取决于多个参数),我无法有效地维护所有冗余的重新定义 这是一个稍微有趣的系统,它允许我始终测试最简单的条件,并根据级别添加更重的测试: #如果4==ASSERT4LEVEL #定义lvlAssert4(条件lvl1、条件lvl2、条件lvl3、条件lvl4、消息)/ myAssert((
#如果4==ASSERT4LEVEL
#定义lvlAssert4(条件lvl1、条件lvl2、条件lvl3、条件lvl4、消息)/
myAssert((conditionlvl1)和(conditionlvl2)和(conditionlvl3)和(conditionlvl4),消息)
#elif 3==ASSERT4LEVEL
#定义lvlAssert4(条件lvl1、条件lvl2、条件lvl3、条件lvl4、消息)/
myAssert((conditionlvl1)和&(conditionlvl2)和&(conditionlvl3),消息)
#elif 2==ASSERT4LEVEL
#定义lvlAssert4(条件lvl1、条件lvl2、条件lvl3、条件lvl4、消息)/
myAssert((conditionlvl1)和&(conditionlvl2),消息)
#否则
#定义lvlAssert4(条件lvl1、条件lvl2、条件lvl3、条件lvl4、消息)/
myAssert((conditionlvl1),消息)
#恩迪夫
如何在不执行条件的情况下复制此行为?您可以根据调试标志创建两个不同的函数。release函数应该是内联的,不应该做任何事情
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宏,它可以在编译期间执行许多功能强大的操作。您可以根据debug标志创建两个不同的函数。release函数应该是内联的,不应该做任何事情
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宏,它可以在编译期间执行许多功能强大的操作。Frabbits的答案对于这种情况是正确的,但下面是宏版本
@:macro static public function dbgAssert(condition, message) {
#if debug
return macro if (!($condition)) { implementation.Assert($message); }
#else
return macro {};
#end
}
Frabbits的答案在这种情况下是正确的,但这里也是宏版本
@:macro static public function dbgAssert(condition, message) {
#if debug
return macro if (!($condition)) { implementation.Assert($message); }
#else
return macro {};
#end
}