【问题标题】:Get the argument types of a C99 variadic function获取 C99 可变参数函数的参数类型
【发布时间】:2015-12-08 10:30:33
【问题描述】:

考虑以下代码:

template <class... Args>
struct function_arguments
{
    using tuple = std::tuple<Args...>;
};

template <class>
struct function_traits
: function_arguments<>
{};

template <class R, class... Args>
struct type<R(Args...)>
: function_arguments<Args...>
{};

template <class R, class... Args>
struct type<R(Args... ...)>
: function_arguments<Args...>
{};

以及以下函数声明:

int f(int x, int y, int z);
int g(int x, int y, int z, ...);

没有问题function_traits&lt;decltype(f())&gt;::tuple 将返回一个包含所有参数类型的元组。有没有办法为 C99 可变参数函数做同样的事情(提取 Args ... + C99 可变参数类型并将所有内容放在一个元组中)?如果有,怎么做?c

【问题讨论】:

    标签: c++ c++11 metaprogramming variadic-templates variadic-functions


    【解决方案1】:

    据我了解,您可以为省略号添加标签并执行

    struct ellipis_tag {};
    
    template <class R, class... Args>
    struct type<R(Args... ...)>
    : function_arguments<Args..., ellipis_tag>
    {};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多