小编Seo*_*eol的帖子

使用c ++中的模板元编程从函数类型中提取调用约定

这是一个相当长的镜头,因为我不确定它是否可能,但也许在模板元编程方面比我更有经验的人会启发我.

我正在编写一个使用模板的自动lua函数绑定系统,使用部分特化提取函数类型:

template<typename T, T FUNCTION> class Function_c;
template<typename R, R (*FUNCTION)()> class Function_c<R (*)(), FUNCTION>; //specialized version
Run Code Online (Sandbox Code Playgroud)

问题是,这并没有告诉我函数调用约定,因此(在VS2012 32位中)它不会为__stdcall编译,并且它将与__fastcall一起崩溃.我可以创建另一个专门的版本来处理特定的调用约定,例如:

template<typename R, R (__stdcall *FUNCTION)()> class Function_c<R (__stdcall *)(), FUNCTION>;
Run Code Online (Sandbox Code Playgroud)

但是排列的数量开始失控:2(全局和成员函数)乘以最大参数数乘以调用约定数.

所以我想知道是否有任何方法可以将调用约定作为模板参数(可能不是,因为它不是真正的类型)来减少copypasting的数量.

c++ templates

8
推荐指数
1
解决办法
963
查看次数

标签 统计

c++ ×1

templates ×1