我想写记录器,我需要关于源文件和行的数据。 这行代码在编译时是否工作:
constexpr std::string_view source = (std::string(__FILE__) + ":" + std::to_string(__LINE__));
如果它在编译时不起作用,我该怎么做呢? 也许这是不可能的?
这不需要分配,也不需要编译时间
#include <iostream>
#define STR_(X) #X
#define STR(X) STR_(X)
int main()
{
//constexpr std::string_view(const char*) doesn't work in some versions of gcc, but is a better alternative if the compiler supports it
constexpr const char* str = __FILE__ ":" STR(__LINE__);
std::cout << str << std::endl;
}
如果我答对了,线和文件都是Makros。 请执行以下操作:
#define STRING(s) #s
constexpr std::string_view source = STRING(__FILE__) + ":" + STRING(__LINE__);
它应该可以在编译时工作。