函数指针类型和值的部分 class 特化

Partial class specialization for function pointer type and value

我正在使用 FLTK 来做与 GUI 相关的事情,它需要 void (*fn)( Fl_Widget*, void* ) 类型的函数注册为小部件回调。我厌倦了手动创建将 void* 解压缩为参数并从我的 class 中调用适当的静态函数来完成用户请求的工作的函数转发器。

我想出了一个解决方案,但它需要一个 class 专门用于函数类型和函数地址,这就是我遇到问题的地方。这是一些代码:

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 >
{
  //...
};