2013-03-19 53 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