C++ 捕获uuu行uuuu和uuu文件uuuuuuu而不定义

C++ 捕获uuu行uuuu和uuu文件uuuuuuu而不定义,c++,c++11,C++,C++11,尝试为以下C风格代码确定“现代”实现: #define logError(...) log(__FILE__, __LINE__, __VA_ARGS__) 是否可以使用可变模板或不依赖于#define 所需用例: logError( "Oh no! An error occurred!" ); 其中,\uuuuuuuuuu文件和\uuuuuu行被捕获在引擎盖下,但反映调用日志错误的位置的文件名和行号 实际上,在处理行号和文件名时,预处理器是唯一的选择 对于编译器来说,不可能使用行号和文件名

尝试为以下C风格代码确定“现代”实现:

#define logError(...) log(__FILE__, __LINE__, __VA_ARGS__)
是否可以使用可变模板或不依赖于
#define

所需用例:

logError( "Oh no! An error occurred!" );

其中,
\uuuuuuuuuu文件
\uuuuuu行
被捕获在引擎盖下,但反映调用
日志错误
的位置的文件名和行号

实际上,在处理行号和文件名时,预处理器是唯一的选择

对于编译器来说,不可能使用行号和文件名作为函数调用的参数(或将它们存储在变量中)


在我的公司,我们在日志记录方面遇到了完全相同的问题。我们最终使用了一个外部脚本扫描源文件,然后构建适当的函数进行调用。

宏确实是您唯一的选择,至少在它成为标准并满足您的愿望之前。

我认为这是不可能的。宏的存在是有原因的,如果需要,您可以使用它。您要求使用这种日志记录创建软断点。
std::source_location
现在在GCC中受支持