我实现了以下struct来检索类成员参数:
template<typename...T>
class pack{};
template<typename...T>
struct getArgs{};
template<typename C,typename R,typename...Args>
struct getArgs<R(C::*)(Args...)>{using Type=pack<Args...>;};但我不确定使用它的语法。
如果我有一个类func1定义为:
template<typename T>
struct func1{
constexpr T operator()(T x){return x+1;}
};我希望typename getArgs<typename func1<int>::operator()>::Type等同于pack<int>,但我的模板参数一直被拒绝为无效。
因此,typename getArgs<typename some_class<class_template_args>::member_function>::Type似乎不是正确的语法。有什么帮助吗?谢谢!
编辑:理想情况下,我不希望实例化func1类的对象,并且已经成功地为我创建的其他函数实现了.
例如,typename getN<1,pack<float,int> >::Type x;作为float x;工作,其中
template<std::size_t N,typename T,typename...Args>
struct getN_help:getN_help<N-1,Args...>{};
template<typename T,typename...Args>
struct getN_help<1,T,Args...>{using Type=T;};
template<std::size_t N,typename T>
struct getN;
template<std::size_t N,typename T,typename...Args>
struct getN<N,pack<T,Args...> >{
using Type=pack<typename getN_help<N,T,Args...>::Type>;
};发布于 2014-12-07 18:26:15
在这条线上:
getArgs<typename func1<int>::operator()>::Typetypename func1<int>::operator()不是一种类型,而是一种函数。您需要在指向它的指针上调用decltype()。使用operator&获取指向成员的指针:
getArgs<decltype(&func1<int>::operator())>::Typehttps://stackoverflow.com/questions/27345406
复制相似问题