3
這是一個關於How do I get the argument types of a function pointer in a variadic template class?使用非const表達式作爲模板參數
跟進我有這樣的結構來訪問可變參數模板的參數:
template<typename T>
struct function_traits;
template<typename R, typename ...Args>
struct function_traits<std::function<R(Args...)>>
{
static const size_t nargs = sizeof...(Args);
typedef R result_type;
template <size_t i>
struct arg
{
typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
};
};
我訪問一個參數的類型的參數
typedef function<void(Args...)> fun;
std::cout << std::is_same<int, typename function_traits<fun>::template arg<0>::type>::value << std::endl;
但是,我想迭代通過參數來處理任意數量的參數。以下不工作,而是想說明我想要的東西:
for (int i = 0; i < typename function_traits<fun>::nargs ; i++){
std::cout << std::is_same<int, typename function_traits<fun>::template arg<i>::type>::value << std::endl;
}
線做一個編譯時迭代謝謝@Mike。我想,它必須是遞歸的,在編譯時,我只是沒有設法把它放在一起;)但是:'fun'在範圍中是未知的。我試圖將'fun'作爲模板參數傳遞,但是在專業化方面,編譯器會抱怨:'不允許使用'功能模板部分專用化''print <0, fun>'。我的專長是:'template void print <0,fun>(){}' –
steffen
2012-01-31 10:36:55
@steffen:不,您不能部分專門化函數模板,只能使用類模板。我想你需要將這些函數包裝在類中;我會更新答案。 – 2012-01-31 10:41:45
美麗,完美的解決方案!謝謝! – steffen 2012-01-31 12:14:11