目前,我现有的代码中约有 90% 是 constexpr。 这就提出了一个问题,我如何向所述代码添加像样的日志记录功能。
目前,我有以下日志代码:
#define log(fmt, ...) \
if !consteval \
{ \
my_logger(("%s [file: %s, Line %d] " fmt), __PRETTY_FUNCTION__, __FILE__, \
__LINE__, ##__VA_ARGS__); \
}
my_logger 当然不是 constexpr,因此我的问题是:在 constexpr 上下文中一般日志记录有其他选择吗?这方面的最佳实践是什么?
您仍然可以组合宏+可变参数模板功能。
#include <iostream>
constexpr bool enable_logging = true;
template<typename arg_t, typename... args_t>
void log(const char* file, long line, arg_t&& arg, args_t&&... args)
{
if constexpr (enable_logging)
{
std::cout << file << "(" << line << ") : " << std::forward<arg_t>(arg);
((std::cout << ", " << std::forward<args_t>(args)),...);
}
}
#define LOG(...) log(__FILE__,__LINE__,__VA_ARGS__);
int main()
{
LOG("hello", 1, 2, 3);
return 0;
}