c++ - 函数指针类型和值的部分类特化

标签 c++ templates c++11 function-pointers template-meta-programming

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

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

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

编辑: 澄清一下——我不想用一个特定的函数来代替 /* 这里有什么? */,但我希望此参数为 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 >
{
  //...
};

关于c++ - 函数指针类型和值的部分类特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28792422/

相关文章:

c++ - 文件创建/删除效率?

c++ - 将数组传递给gtest中的参数化测试

c++ - 在编译时迭代过滤与谓词匹配的参数

c++ - 如何在 C++11 中为 result_of 编写辅助类型

c++ - 参数评估后是否对参数绑定(bind)进行排序?

c++ - condition_variable,引用和线程:谁拥有锁?

c# - C# 代码和非托管 C++ 库之间的双向通信

c++ - 在返回 vector 的循环内使用函数

c++ - 在 C++11 中实现看门狗定时器

javascript - 在 Angular 模板中插入属性值会导致解析错误