gpt4 book ai didi

c++ - 如何在可变参数模板函数中使用 source_location?

转载 作者:IT老高 更新时间:2023-10-28 22:01:44 29 4
gpt4 key购买 nike

C++20 特性 std::source_location 用于捕获有关调用函数的上下文的信息。当我尝试将它与可变参数模板函数一起使用时,我遇到了一个问题:我看不到放置 source_location 参数的地方。

以下不起作用,因为可变参数必须在末尾:

// doesn't work
template <typename... Args>
void debug(Args&&... args,
const std::source_location& loc = std::source_location::current());

以下也不起作用,因为调用者将被插入其中的参数搞砸:

// doesn't work either, because ...
template <typename... Args>
void debug(const std::source_location& loc = std::source_location::current(),
Args&&... args);

// the caller will get confused
debug(42); // error: cannot convert 42 to std::source_location

我在 comment 中得到通知std::source_location 与可变参数模板无缝工作,但我很难弄清楚如何。如何将 std::source_location 与可变参数模板函数一起使用?

最佳答案

第一种形式可以通过添加 deduction guide 来实现。 :

template <typename... Ts>
struct debug
{
debug(Ts&&... ts, const std::source_location& loc = std::source_location::current());
};

template <typename... Ts>
debug(Ts&&...) -> debug<Ts...>;

测试:

int main()
{
debug(5, 'A', 3.14f, "foo");
}

DEMO

关于c++ - 如何在可变参数模板函数中使用 source_location?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57547273/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com