我採取了以下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:05:14
是的,沒錯。 – dumb0 2014-12-07 18:10:49
好的,你有'func1''operator()'帶一個'T'。您還是不假定可調用的模板參數與可調用函數接受的類型相同? –
2014-12-07 18:18:02