在 constexpr 上下文中记录替代方案/解决方案

问题描述 投票:0回答:1

目前,我现有的代码中约有 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 上下文中一般日志记录有其他选择吗?这方面的最佳实践是什么?

c++ logging constexpr
1个回答
0
投票

您仍然可以组合宏+可变参数模板功能。

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.