获取 C99 可变参数函数的参数类型
Get the argument types of a C99 variadic function
考虑以下代码:
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<decltype(f())>::tuple
将return一个包含所有参数类型的元组。有没有办法为 C99 可变参数函数做同样的事情(提取 Args... + C99 可变参数类型并将所有内容放在一个元组中)?如果是,怎么办?c
据我了解,您可以为省略号添加一个标签并执行
struct ellipis_tag {};
template <class R, class... Args>
struct type<R(Args... ...)>
: function_arguments<Args..., ellipis_tag>
{};
考虑以下代码:
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<decltype(f())>::tuple
将return一个包含所有参数类型的元组。有没有办法为 C99 可变参数函数做同样的事情(提取 Args... + C99 可变参数类型并将所有内容放在一个元组中)?如果是,怎么办?c
据我了解,您可以为省略号添加一个标签并执行
struct ellipis_tag {};
template <class R, class... Args>
struct type<R(Args... ...)>
: function_arguments<Args..., ellipis_tag>
{};