能否替换这个预处理宏:
#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
可以是什么类型? - Anon Maila
会使得语句a;
有任何意义呢?如果不知道具体情况,很难回答这个问题。也许你是指a();
并且它是一个函数指针?如果是这种情况,那么只需要一个简单的内联函数就可以了,除非你需要具有不同签名的函数。 - Clifford