【发布时间】:2020-12-15 10:24:39
【问题描述】:
我正在寻找的是记录消息的日志功能,但每个呼叫站点只有一次。
记录第一次发生的错误、超时等情况会很有用,而不会向 cout/log 文件发送垃圾邮件。
传统上它是用宏实现的(它们扩展为一些静态布尔/计数器,您可以在glog 中查看 LOG_FIRST_N 了解详细信息),但我想知道在 C++20 中是否可以在没有宏的情况下完成。
我尝试过的:
Use std::source_location as template param,基于此 answer,不起作用,因为 std::source_location::current() 的魔法无法正常工作。
注意:我知道我可以拥有一个静态的 std::set/std::unordered_set 呼叫站点,但我对与邪恶 MACRO 解决方案一样高效的解决方案感兴趣。
【问题讨论】: