2012-02-03 40 views
2

所以我是新來提升MPL,我不知道如何使用它與標準類型。變換元組類型

我想要的覆羽這種類型的元函數:

std::tuple<T0, T1, ..., TN> 

進入這個:

std::tuple< 
    std::function<T0(std::tuple<T0, T1, ...>, std::tuple<T0, T1, ...>)>, 
    std::function<T1(std::tuple<T0, T1, ...>, std::tuple<T0, T1, ...>)>, 
    ..., 
    std::function<TN(...)> 
> 

而且好像這可能是與transform做,但我希望有一個元組類型,而不是類型的向量。 (它實際上並不需要使用MPL,但我猜它會更短?)

背景:目前我使用的是完全通用的類型,如果使用了錯誤,依靠所有的地獄崩潰,但我想計算TupleOfFunctions以獲得適當的錯誤。

template<class TupleOfValues, class TupleOfFunctions> 
void f(TupleOfValues v, TupleOfFunctions fun) 

回答

4

以下情況如何?

template<typename T> struct transform; 
template<typename ...T> 
struct transform<std::tuple<T...>> { 
    typedef std::tuple<std::function<T(std::tuple<T...>, std::tuple<T...>)>...> type; 
}; 
+3

它不能編譯,但使用的是正確'的std :: function'語法形式的作品:'的std ::組<性病::功能,性病::元組)> ...>'。 – kennytm 2012-02-03 09:38:21

+0

哇,我不認爲'......'是如此強大,預計不得不手動展開它,很好。 (可以修復語法,但我還不能) – pascal 2012-02-03 12:42:37