我实现了以下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
类的对象,并且已经成功地为我创建的其他函数做了...
E.g。 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>;
};
答案 0 :(得分:1)
在这一行:
getArgs<typename func1<int>::operator()>::Type
typename func1<int>::operator()
不是一种类型,它是一种功能。您需要在指向它的指针上调用decltype()
。使用operator&
获取指向成员的指针:
getArgs<decltype(&func1<int>::operator())>::Type