![]() |
1
2
您可以让自己的类执行与boost bind函数相同的操作。类所要做的就是接受函数类型和指向包含函数的对象的指针。例如,这是一个void返回和void参数委托:
用途:
现在,因为
这就是多态性发挥作用的地方。您可以创建一个接口IDelegate,它具有一个函数invoke:
如果
|
![]() |
2
2
您可以将绑定的参数推送到全局变量中,并创建一个静态函数来获取该值并对其调用该函数,或者您必须动态生成每个实例的函数-这将涉及某种动态代码生成,以在具有静态局部变量集的堆上生成一个存根函数到所需的值,然后对其调用函数。 第一种方法简单易懂,但根本不是线程安全的或可重入的。第二个版本是混乱和困难的,但是如果做得正确,线程是安全的,并且是可重入的。
编辑:我刚发现ATL使用代码生成技术来实现这一点——它们会动态生成thunk,从而设置
请注意,由于文章是写的,DEP已经存在,您需要使用
|
![]() |
3
1
|
![]() |
4
0
我现在让它工作起来,将C转换成一个单例,将C::M分解成C::M impl,然后声明静态C::M(int),它将转发到单例实例。说说黑客。 |
![]() |
Andre · Boost日志琐碎自动刷新 7 年前 |
![]() |
Vitor · 如何使用boost::bind追加参数? 7 年前 |
![]() |
slepasteur · 提高MSM编译速度 7 年前 |
![]() |
werk jlcv · 如何快速删除数百万个文件 7 年前 |
![]() |
hromer · 我的Boost正则表达式与任何内容都不匹配 7 年前 |
![]() |
user997112 · 使用互斥量和条件变量跨内存提升进程间共享向量 7 年前 |