2013-03-19 32 views
3

我有一個類似於this one的類型列表實現。如果你不知道類型列表是什麼:簡而言之,它的行爲就像使用嵌套元組的可變參數模板。你可以閱讀更多關於他們here從Typelist子集創建函數指針

我想從這個類型列表的一個子集建立一個函數指針類型。子集由一系列索引(任意大小)定義,所需操作在類型列表中查找這些索引,並使用這些類型作爲參數定義函數上指針的類型。

的API看起來是這樣的:

#include "typelist.h" 
// typelist definition 
typedef Typelist<float, Typelist<double, Typelist<int, NullType>>> Pixel; 

typedef FunctionFromFields<Pixel, 0, 2>::Type field_0_and_2; 
// I want the definition above to be equivalent to: 
// typedef void (*field_0_and_2)(float*, int*); 

似乎可以合理地認爲這是可能的,因爲一切都在編譯時已知,但我還沒有找到那個正確的語法。

我不想使用可變參數模板來替換類型列表,但是它們可以用來定義指針類型。

有沒有人做過類似的事情?

回答

2

這應該相當容易。首先定義一個typelist_nth型功能(作爲一個練習,我假設你有一個在你的typelist.h):

template<typename TL, int I> struct typelist_nth; 

然後用可變參數模板建立一個函數類型:

template<typename TL, int... Is> struct FunctionFromFields { 
    typedef void (*Type)(typename typelist_nth<TL, Is>::type *...); 
}; 
+0

是的,這確實它。這確實不難,我只是把自己和語法搞混了。 – Thibaut 2013-03-19 17:29:35