【发布时间】:2016-03-26 05:13:42
【问题描述】:
是否可以替换这个预处理器宏:
#define AL_CALL(a) do { a; \
ALenum e = alGetError(); \
if(e != AL_NO_ERROR) \
UtilitySoundNode::printALError(e,__FILE__, __LINE__); \
} while(0)
使用 C++ 模板?如果可能,这样做是否有意义(优点/缺点 - 开销/调试)?
注意: 基本上我想知道在 C++ 中是否有一种优雅的方式来处理这种错误处理。
编辑: 当然我犯了一个错误 a 是一个函数调用。有人可能猜到它是一个带有 OpenAL 函数参数的函数调用。
AL_CALL(someAlFunction(param1, param2))
注意: 有人决定编辑宏并使其更好,但我也更愿意保留原始宏。所以这里是:
#define AL_CALL(a) {a; ALenum e = alGetError();if(e != AL_NO_ERROR)PUtilitySoundNode::printALError(e,__FILE__, __LINE__);}
【问题讨论】:
-
a可以是什么类型的? -
a是什么让声明a;有意义?在不知道的情况下很难回答这个问题。也许您的意思是a();,它是一个函数指针?如果是这种情况,那么只需要一个简单的 inline-functon,除非您需要具有不同签名的函数。 -
这真的是一个c宏吗? (
UtilitySoundNode::printALError!) -
@user3490458 :我猜他的意思是一个 C 预处理器宏——你可以把任何你喜欢的东西放在宏中,就预处理器而言,预处理器不检查语法,这是由展开后的编译器。我编辑了文本和标签以更正它。
-
@AnonMail 是一个函数调用。很抱歉没有指出这一点。
标签: c++ templates macros c-preprocessor