cpr*_*mer 4 c++ templates boost callback
我正在使用一个未实现非常好的回调系统的模块.客户端正在使用ID注册,并将使用变量(或两个或无)变回.问题是几乎每个ID都是一个不同的变量.(例如:Id1 - > char*,Id2 - > int).这是通过指针传递变量来实现的.所以回调看起来像
typedef void (*NotifFunctionPtr)(void* ctx, const void* option);
Run Code Online (Sandbox Code Playgroud)
这种方法有很多问题,我希望用(类型)安全和现代的方式来替换它.然而,这并不像它看起来那么简单,我有一些想法(like boost::function或用void*一个封装类型和ptr的结构代替)但我想也许有更好的主意,所以我想知道什么是现代的设置方式C++中的类型安全回调.
编辑:另一个想法是通过模板函数注册一个类型为T的回调,该函数使用相同的类型T回调.这是可行的还是在库中实现的?
Dav*_*eas 10
您的问题不是回调问题,而是您希望将所有回调视为相同类型,而不是(签名不同).因此要么你做了讨厌的C void*技巧,要么你想使用类型安全的方法,你将不得不为它付费,并提供不同的方法来注册不同的回调类型 - 恕我直言是正确的方法.
一旦你解决了这个问题,就可以使用signals或者signals2库来实现你自己的轮子function作为基础(避免重写类型擦除).
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |