C++ 中的一种 addeventlistener
A kind of addeventlistener in c++
我认为它在 c++ 中不存在,但它会非常方便。假设我有一个班级:
class SPRITE
{
void RunTo(POINT pt);
SPRITE(MAINCLASS* main);
}
还有一个主要功能:
SPRITE sprite=new SPRITE();
while(1)
{
GetCursorPos(&pt);
FrameMove(frame,pt);
}
因此,如果我想用光标位置调用SPRITE::RunTo
,我需要从主循环调用它,这对于一个类来说很简单,但对于许多类来说则更少。
我正在考虑的好事是这样的:
SPRITE::SPRITE(MAINCLASS* main)
{
main->AddListener(main::Framemove(int frame,POINT pt){ RunTo(pt); });
}
这是一个纯粹的发明,但也许有一些东西可以做同样的事情?
谢谢
所以感谢 Rusty,这就是我所做的:
在主要.cpp:
struct PFUNC
{
void (*func)(void* classvar, void* arg0);
void* classvar;
}
vector <PFUNC> onFrameMove;
void FrameMove(int frame,POINT pt)
{
#some jobs here
for(int i=0;i<onFrameMove.size();i++)
onFrameMove[i].func(onFrameMove[i].classvar, onFrameMove[i].arg0);
}
在SPRITE中.cpp:
SPRITE::SPRITE(MAINCLASS* main)
{
PFUNC fc;
fc.classvar = this;
fc.func = &FrameMoveCB;
main->onFrameMove.push_back(fc); //add to the main job
}
void FrameMoveCB(void* classobject, void* arg0) //callback to translate the void*s
{
SPRITE* Sprite= (SPRITE*)classobject;
Sprite->FrameMove(*(POINT*)arg0); //call the true method
}
void SPRITE::FrameMove(POINT pt)
{
//more job here
}
所以我的主循环处理所有工作,我不必在添加新类时修改它。
如果有人有更简单的,我会很高兴,但我认为这很好(而且它有效)
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 一种在C++中读取TXT配置文件的简单方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 在运行时检查继承是否只有一种类型和 void*
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 寻找一种更好的方法来表示无符号字符数组
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量