2017-09-23 42 views
0

我有一個(lambda)函數,並且有很多函數作爲可變參數包傳入第三個函數。簽名看起來像使用可變參數模板中的一組函數調用函數

template<typename F, typename... G> 
ret_t call(F&& func, G&&... getters); 

F將有多達參數給出的getters數量。

現在我需要撥打func,返回值爲getter,這個值被稱爲硬編碼(constexpr)常數,否則確定。所以untemplated代碼可能看起來像

{ 
    return func(getters_1(0), getters_2(0), getters_3(0) /* , ... */); 
} 

我當然想與自動化模板元編程的過程。


我想避免一個臨時數組或任何中間容器。 (這不是針對泛型,我知道getter的返回類型。)我希望它儘可能直接傳遞給函數,以便優化和避免內存浪費。

我可以包裹f控制拉姆達封閉的多層次,每包一個參數給它,並希望最好由編譯器,但反正我所要求的更好和更清晰的方式來做到這一點。

+0

C++ 11,C++ 14或C++ 17? – max66

+0

@ max66,我用g ++ 7.2 so C++ 17。 – YiFei

+0

@YiFei總是不變的? – Rakete1111

回答

4

如果我理解你正確地你想要的東西是這樣的:

template<typename F, typename... G> 
ret_t call(F&& func, G&&... getters) { 
    return std::forward<F>(func)(std::forward<G>(getters)(0)...); 
} 
+1

這真是令人耳目一新!我稍後再嘗試,從來不知道我可以在一個步驟中轉發和調用函數。 – YiFei

相關問題