1

有没有一种简单的方法来构建一个包含_FILE__LINE_值的字符串?

我可以做类似的事情:

std::stringstream ss;
ss << "Error in "<<_FILE_<<":"<<_LINE_<<" - too many bees!";
log(ss.str());

但这是一个 PITA,与可能的理想相比:

log("Error in "+_FILE_+":"+_LINE_+" - too many bees!");

在 C++/STL/boost 中有没有一种巧妙的方法来做到这一点?注意我仅限于较旧的编译器,没有 C++11!

4

1 回答 1

2

正如亚历克斯所评论的那样:双重宏扩展以制成__LINE__字符串并让编译器为您连接字符串:

#define S(x) #x
#define S_(x) S(x)
#define S__LINE__ S_(__LINE__)

log("Error in "__FILE__":"S__LINE__" - too many bees!");

正如greatwolf建议的那样,减少打字:

#define logfl(s) log("Error in "__FILE__":"S__LINE__" - "s)

logfl("too many bees!");
于 2013-10-16T10:57:52.797 回答