接受新对象的宏

dom*_*lao 1 c++ winapi mfc event-handling c-preprocessor

在我的代码中,我有:

#define EV( event ) SendEvent( new event );
EV( evFormat );
Run Code Online (Sandbox Code Playgroud)

但我想在EV宏中传递一个创建的对象,如:

CEvent *ev = new CEvent();
EV( ev );
Run Code Online (Sandbox Code Playgroud)

这可能吗?因为我无法修改EV宏.

Che*_*Alf 5

#define EV( event ) SendEvent( new event );    // Can't be changed.
Run Code Online (Sandbox Code Playgroud)

宏强制执行每次调用都SendEvent应该创建一个新的动态对象.您的问题不仅仅是因为使用宏是愚蠢的,例如降低了源代码的可读性.这也是宏不允许您在调用之前创建对象,并且您不能更改宏; 用你的话说"我无法修改EV宏".


因此解决方案很简单:

不要使用宏,SendEvent直接使用,切记不要delete.