我知道如何以旧的方式获取函数类型的参数,但我想知道是否有一个很好的新方法来使用Hana?例如,我想要这样的东西:
var audioCtx = new AudioContext();
var source = audioCtx.createMediaElementSource(myMediaElement);
myMediaElement = document.createElement("audio");
myMediaElement.setAttribute("autoplay", true);
myMediaElement.setAttribute("src", uri);
myMediaElement.setAttribute("controls", "controls");
document.getElementById('player').appendChild(myMediaElement);
source.connect(audioCtx.destination);
如何在此处获取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
?
答案 0 :(得分:5)
编辑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
或您的用例所需的任何内容。