C++ 在字符串变量中包括行号和文件名

C++ 在字符串变量中包括行号和文件名,c++,visual-studio-2005,C++,Visual Studio 2005,有没有一种简单的方法可以构建包含\u文件和\u行值的字符串 我可以这样做: std::stringstream ss; ss << "Error in "<<_FILE_<<":"<<_LINE_<<" - too many bees!"; log(ss.str()); 在C++/STL/boost中有没有一种简洁的方法可以做到这一点?注意我只限于旧的编译器,没有C++11 正如Alex评论的那样:通过双宏扩展,将\uuuuu LIN

有没有一种简单的方法可以构建包含
\u文件
\u行
值的字符串

我可以这样做:

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

在C++/STL/boost中有没有一种简洁的方法可以做到这一点?注意我只限于旧的编译器,没有C++11

正如Alex评论的那样:通过双宏扩展,将
\uuuuu LINE\uuuuu
变成一个字符串,并让编译器为您连接字符串:

#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!");

顺便说一句,应该是
\uuuuuuuuuuuuu
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我看到的问题有单下划线和双下划线,还有
\uuuuuuuuuuuuuuuuuuuuuu如果有人为其中一个问题提供答案,那将是理想的。@John您需要自定义日志消息的哪一部分?我怀疑每次你想记录一些东西时,你都想继续键入
\uuuuu FILE\uuuuuuu
\uuuuuu LINE\uuuuuuuuuu
。我还发现,为某个返回ostream&的函数定义日志非常有用,这样你就可以在那里记录所有类型的对象
#define logfl(s) log("Error in "__FILE__":"S__LINE__" - "s)

logfl("too many bees!");