C++ 使用boost::hana获取函数参数的类型

C++ 使用boost::hana获取函数参数的类型,c++,boost,c++14,boost-hana,C++,Boost,C++14,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>

我知道如何用旧方法获取函数参数的类型,但我想知道是否有一种很好的新方法可以使用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
structfoo{
int func(浮点);
};
auto getFuncType(auto t)->declval()::func(TYPE?{}
getFunType(type_c);//应与c型或类似类型相同

如何在此处获取
类型

编辑2016年6月21日-为匹配当前版本的库(0.4)而进行的微小更改

我是@ildjarn提到的CallableTraits库的作者(尽管它还没有包含在Boost中)。元函数是我所知道的从成员函数、函数、函数指针、函数引用或函数对象/lambda获取参数类型的最佳方法

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

对于成员函数指针,
arg\u at\u t
将相当于
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(){}
#包括
#包括
结构foo{
int func(浮点);
};
使用func_param=callable_traits::arg_at_t;
静态断言(std::is_same::value,“”);
int main(){}
然后,您可以将其放入一个
boost::hana::type
或您的用例所需的任何东西中


你看了吗?没有,我会看的。它的规模有多大?它似乎仍然使用MPL作为其后端,由于编译时间的原因,我试图避免使用MPL。如果您不想自己动手,那么建议的是现代解决方案。我假设您知道您的问题通常无法解决,并且您要求的是一些有限的解决方案?我想说的是,这将超出Hana的范围,因为Hana本身不提供任何特征。它所做的是提供一种使用函数语法使用现有特征(例如来自
)的方法,但它没有定义任何新的特征。您能否详细说明什么是稳定的,以及库中计划更改的内容?除了文档之外,我是否可以假设一般功能将保留下来,或者会有重大的改进?@user975989因为我没有空间回答您的问题,所以我在中进行了回答。@user975989我更新了我的回答,以反映最新版本的更改。