2012-08-24 32 views
1

是否可以防止功能参数评估? 因为我不想在某些情况下评估函数参数。C++如何防止功能参数评估

E.g. 要记录调试消息,

void log(int severity, ...); 

我想记录的消息

log(DEBUG, "%s", getErrorMsg().c_str()); 

如果严重性DEBUG,日志功能仅仅是在发布二进制返回。 因此,没有必要评估getErrorMsg();

回答

1

传递给函数的任何参数都将在进入函数之前始终进行评估。

您可能希望传递类似于指针的东西,因此指针本身就是所评估的内容,并且您只在/必要时通过该指针调用函数。

+0

感谢。我可以知道如何声明一个通用函数指针,以便我可以通过吗? –

+0

显然在这种情况下,你需要类似'char const *(*)()'(指向不带参数的函数指针并返回指向char的指针)。虽然有些人不喜欢它,但是如果你有'std :: function',那可能值得考虑。 –

+0

是的。由于log函数接受变量参数,因此参数可以是log(DEBUG,“%d,%s”,iValue,getSth(iValue).c_str());是否有可能迎合所有情况? –

1

您可以使用宏:

#define log(severity, ...) if (severity!=DEBUG) log_impl(severity,__VA_ARGS__);