gpt4 book ai didi

c++ - 在编译时迭代函数参数类型

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:43 25 4
gpt4 key购买 nike

在 C++ 中有什么方法可以在编译时迭代函数参数类型吗?我想做这样的事情:

struct null_type {};

float foo(int, bool, char);

get_param_type<foo, 0>::type float_var; // return type
get_param_type<foo, 1>::type int_var; // first arg type
get_param_type<foo, 2>::type bool_var; // second arg type
get_param_type<foo, 3>::type char_var; // third arg type
get_param_type<foo, 4>::type null_type_var;

最佳答案

你可以很容易地自己写这个。首先,将函数参数类型打包成一个元组:

#include <tuple>

template <typename> struct FnArgs;

template <typename R, typename ...Args>
struct FnArgs<R(Args...)>
{
using type = std::tuple<Args...>;
};

现在您可以使用标准元组 API 来访问元素:

using FT = FnArgs<decltype(foo)>::type;

std::tuple_element<0, FT> x;

如果您需要,可以轻松添加成员函数指针的进一步特化。

(您不能轻易绕过 decltype,因为(目前)还没有针对非类型模板参数的类型推导。)

关于c++ - 在编译时迭代函数参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501496/

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