gpt4 book ai didi

c++ - 具有可变参数模板和 va_args 的 function_traits

转载 作者:行者123 更新时间:2023-11-30 02:14:30 29 4
gpt4 key购买 nike

前一段时间遇到这样的用法:

template <typename Return, typename ... Args>
struct function_traits<Return(*)(Args......)>{};

上面是 Args 的可变参数扩展,后面是 C 风格的可变参数。

最近我在另一个媒体上讨论这个,对方认为这样做仍然有效:

template <typename Return, typename ... Args>
struct function_traits<Return(*)(Args...,...)>{};

他们认为逗号是允许的。但是以前我被迫使用......,但我不记得为什么。它绝对是在 stackoverflow 上,但它是在一个不相关的主题上,我再也找不到它了。我确实记得一些关于 MSVC 错误的事情,它可能迫使我省略了逗号。

问题:

  1. varidic 扩展的两种形式在该上下文中都有效吗?如果不是,为什么?或
  2. 有人知道我记得读过的讨论在哪里吗?;在这种情况下关闭主题然后在此处链接将帮助其他人找到答案。我再也找不到它了,所以我想其他人也会有同样的问题。

最佳答案

Are both forms of the varidic expansion valid in that context, if not why?

这两种形式确实有效。语法生成的相关部分在[dcl.fct]/3

parameter-declaration-clause:    parameter-declaration-listopt ...opt    parameter-declaration-list , ... 

无论哪种方式,parameter-declaration-list 都可以遵循形成模板参数包扩展的产生式(这就是第二组 ... 出现的地方来自)。

关于c++ - 具有可变参数模板和 va_args 的 function_traits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57797739/

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