其他分享
首页 > 其他分享> > c – 使用boost :: hana获取函数参数的类型

c – 使用boost :: hana获取函数参数的类型

作者:互联网

我知道如何以旧的方式获取函数的参数类型,但我想知道是否有一个很好的新方法与Hana一起做?例如,我想要这样的东西:

struct foo {
    int func(float);
};

auto getFuncType(auto t) -> declval<decltype(t)::type>()::func(TYPE?) {}
getFunType(type_c<foo>); // should equal type_c<float> or similar

我如何在这里获得TYPE?

解决方法:

编辑2016年6月21日 – 轻微更改以匹配库的当前版本(0.4).

我是CallableTraits的作者,这是@ildjarn上面提到的库(尽管它尚未包含在Boost中). arg_at_t元函数是我知道从成员函数,函数,函数指针,函数引用或函数对象/ lambda获取参数类型的最佳方法.

请记住,图书馆目前正在进行重大更改,并且链接文档有些过时(即使用时风险自负).如果您使用它,我建议克隆develop branch.对于您正在寻找的功能,API几乎肯定不会改变.

对于成员函数指针,arg_at_t< 0,mem_fn_ptr>别名相当于decltype(* this),以解释隐含的this指针.所以,对于你的情况,你会这样做:

#include <type_traits>
#include <callable_traits/arg_at.hpp>

struct foo {
    int func(float);
};

using func_param = callable_traits::arg_at_t<1, decltype(&foo::func)>;

static_assert(std::is_same<func_param, float>::value, "");

int main(){}

然后,您可以将其放入boost :: hana :: type或您的用例所需的任何内容.

Live example

标签:boost-hana,c,c14,boost
来源: https://codeday.me/bug/20190829/1758163.html