一个delegate用MARCO实现的问题

dick_song 2006-06-28 08:45:06
我用MARCO写了段delegate的实现,比较简陋,考虑的也不够仔细,希望大家给给意见,让我得以完善,谢谢。
以后我还打算用template写一个,但网上有好多用template写的版本,写法都有不同,各位大侠能给出一段比较好的让我学一下吗?
//MARCO 版
//{{AFX MARCO
#define CDelegate(rt,name,args,vars)class name{\
public:\
name(){\
m_pFunc = NULL;\
m_spFunc = NULL;\
m_pThis = NULL;\
}\
name(void* pObj,...){\
m_pThis = pObj;\
va_list marker;\
va_start(marker,pObj);\
m_pFunc = va_arg(marker,ptr_func);\
va_end(marker);\
va_start(marker,pObj);\
m_spFunc = va_arg(marker,s_ptr_func);\
va_end(marker);\
}\
virtual ~name(){}\
public:\
rt operator()(args){\
if (m_pThis)\
return (((name*)m_pThis)->*m_pFunc)(vars);\
else\
return (m_spFunc)(vars);\
}\
const name& operator=(name obj){\
this->m_pFunc = obj.m_pFunc;\
this->m_spFunc = obj.m_spFunc;\
this->m_pThis = obj.m_pThis;\
return *this;\
}\
bool operator!(){\
return (!m_pFunc);\
}\
typedef rt (name::* ptr_func)(args);\
typedef rt (* s_ptr_func)(args);\
protected:\
ptr_func m_pFunc;\
s_ptr_func m_spFunc;\
void* m_pThis;\
};
//}}AFX MARCO
...全文
210 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dick_song 2006-06-28
  • 打赏
  • 举报
回复
“用到了 va_start”
在那个构造函数的使用上其实是需要加以限制的,第一个参数必须是对象的指针(作普通函数指针用的话置为NULL),第二个参数必须是函数名。其余的一切用法都会有问题,这个也是我想改善的地方,因为使用者不一定看我写的那堆说明(这里没有列出),就算看了也不一定遵循。出了问题的还是会找我(实在头痛)。
因此,大侠您有好方法吗?请提点一下,谢谢。
双杯献酒 2006-06-28
  • 打赏
  • 举报
回复
用到了 va_start,
如果函数有引用参数,是不是会有问题?
内容概要:本文档详细介绍了基于直驱永磁同步发电机(PMSG)的1.5MW风力发电系统在Simulink环境下的建模与仿真全过程,涵盖了风力机空气动力学模型、PMSG电磁特性建模、不可控整流与逆变电路、直流环节、空间矢量脉宽调制(SVPWM)技术以及核心控制策略的设计。重点实现了最大功率点跟踪(MPPT)控制以提升风能捕获效率,并构建了电压外环与电流内环协同工作的双闭环控制系统,通过仿真验证了系统在不同风速条件下稳定运行的能力及动态响应性能。; 适合人群:适用于具备电力系统、电机控制理论基础及Simulink仿真操作经验的研究生、科研人员和从事新能源发电系统开发的工程技术人员;特别适合正在进行风电系统建模、控制算法研究或完成相关毕业设计的专业人士。; 使用场景及目标:①深入理解直驱式PMSG风力发电系统的整体架构与工作机理;②掌握从物理部件建模到控制策略实现的完整Simulink仿真流程;③学习并复现MPPT控制、双闭环控制等关键技术方案;④为后续开展低电压穿越、并网稳定性分析、故障诊断等高级课题提供可靠的仿真平台支撑。; 阅读建议:建议结合Matlab/Simulink软件动手实践,逐模块搭建模型,重点关注各控制环节的参数设计与调试方法,同时可参照文中提供的其他风电相关资源进行拓展学习与对比分析。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧