我实现了以下结构体
来检索类成员参数:
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>;
};
func1<T>
的函数对象,它的operator()
接受一个类型为T
的参数。你是否假设可调用对象的模板参数与可调用函数接受的类型相同? - Ryan Haining