我正在使用FLTK做与GUI相关的工作,并且它需要将类型的函数void (*fn)( Fl_Widget*, void* )
注册为小部件回调。我厌倦了手工创建函数转发器,这些函数将void*
s解压缩为参数并从类中调用适当的静态函数来完成用户请求的工作。
我想出了一个解决方案,但是它需要一个专门针对函数类型和函数地址的类,而这正是我遇到的问题。这是一些代码:
template< typename T, typename fn_ptr_t, fn_ptr_t fn_ptr >
struct Fl_Callback_package;
template< typename T, typename Return, typename... Params >
struct Fl_Callback_package< T, Return (*)( Params... ), /* What goes here? */ >
{
//...
};
编辑:澄清一下-我不希望使用特定功能代替/* What goes here? */
,而是希望此参数为Return (*fn_ptr)( Params... )
。当我尝试
template< typename T, typename Return, typename... Params >
struct Fl_Callback_package< T, Return (*)( Params... ), Return (*fn_ptr)( Params... ) >
我收到来自GCC 4.8.1的错误,该错误fn_ptr
未在此范围内声明。
您放置Return (*fn_ptr)( Params... )
在错误的位置。这是部分专业化的模板参数,因此它进入template <...>
。
template< typename T, typename fn_ptr_t, fn_ptr_t fn_ptr >
struct Fl_Callback_package;
template< typename T, typename Return, typename... Params, Return (*fn_ptr)( Params... ) >
struct Fl_Callback_package< T, Return (*)( Params... ), fn_ptr >
{
//...
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句