2011-09-16 38 views
2

我遇到了一個可變參數函數模板的問題。我需要檢查參數包的每個元素,打包元素,然後將所有打包元素填充到一個元組中並返回。下面是想我做的(返回類型只是佔位符,不知道他們會是什麼)的總體思路:如何修改參數包的每個元素,並從這些元素創建一個元組?

template<typename A> 
sometype func_helper(A a) { 
    //examine a, depending on type, do different stuff with it. 
    return modified_a; 
} 

template<typename... Args> 
tuple<sometypes...> func(Args... args) { 
    return make_tuple(func_helper...(args)); 
} 

任何想法?

+2

'return std :: make_tuple(func_helper(args)...);'? –

+0

是的,這就是我真正想到的問題。不能相信我沒有嘗試過。謝謝! –

回答

7

您可以使用推導返回類型。可悲的是它有代碼重疊:

#include <iostream> 
#include <tuple> 

template<typename A> 
int func_helper(A) { 
    //examine a, depending on type, do different stuff with it. 
    return 1; 
} 

char func_helper(double) { 
    return 'A'; 
} 

template<typename ...Args> 
auto func(Args... args) -> decltype(std::make_tuple(func_helper(args)...)) { 
    return std::make_tuple(func_helper(args)...); 
} 

int main() 
{ 
    auto a = func(1, 3.4); 
    std::cout << std::get<0>(a) << ' ' << std::get<1>(a) << '\n'; 
} 
+1

我甚至沒有意識到我可以這樣稱呼func_helper。我知道我可以推斷出這種類型,但由於某種原因,我認爲sizeof()是唯一可以用...符號調用的函數。無論如何,只是試了一下,它的工作原理。謝謝! –

+0

是不是有一種不需要冗餘decltype的自動返回類型? –

+0

難道這不好嗎:)不要認爲這是可用的。 –

相關問題