非议MFC(一)宏和类型定义的困惑

原创 2003年02月01日 15:30:00

                          非议MFC(一)宏和类型定义的困惑

关键字:C++,MFC,宏,macro,define,typedef

有感于MFC库代码之去简就繁、之故弄玄虚,作下文,聊博一笑。

请看一段常见的代码:

//in user.h
class CTest
{
private:
        int x;
public:
        void SetX(int setX);
        int GetX() const;
        operator int *();
        operator const int *() const;
        void * GetSafeHandle() const;
};

//in user.cpp
#include "user.h"
void CTest::SetX(int setX)
{
        x=setX;
}
//...

我们(MFC的作者)认为这样的代码太浅显,不够深沉,缺少内涵,没有嚼劲。赶快include我们的头文件吧,它可以提高代码的整体形象。我们的口号是:让蓝色关键字在屏幕上消失。

//in minimfc.h
#define USER_CLASS class
#define BEGIN_CLASS_DECLARATION {
#define END_CLASS_DECLARATION };
#define PRIVATE_MEMBER private:
#define PROTECTED_MEMBER protected:
#define PUBLIC_MEMBER public:
#define OPERATOR_OVERLOAD operator
#define CONSTANT_MEMBER_FUNTION const
#define BEGIN_FUNCTION_DEFINITION {
#define END_FUNCTION_DEFINITION }
typedef void AFX_RETURN_VOID_FUNCTION;
typedef int INT;
typedef int * LPINT;
typedef const int * LPCINT;
typedef void * HOBJ;

看!我们做到了。从此,我们的客户代码将这样写:

//in user.h
#include "minimfc.h"
USER_CLASS CTest
BEGIN_CLASS_DECLARATION
PRIVATE_MEMBER
        INT x;
PUBLIC_MEMBER
        AFX_RETURN_VOID_FUNCTION SetX(INT setX);
        INT GetX() CONSTANT_MEMBER_FUNTION;
        OPERATOR_OVERLOAD LPINT();
        OPERATOR_OVERLOAD LPCINT() CONSTANT_MEMBER_FUNTION;
        HOBJ GetSafeHandle() CONSTANT_MEMBER_FUNTION;
END_CLASS_DECLARATION

//in user.cpp
#include "user.h"
AFX_RETURN_VOID_FUNCTION CTest::SetX(INT setX)
BEGIN_FUNCTION_DEFINITION
        x=setX;
END_FUNCTION_DEFINITION
//...

MFC宏和类型定义

                                宏和类型定义的困惑                            自:[http://blog.csdn.net/cphj/ar...
  • sinhua_ren
  • sinhua_ren
  • 2007年08月03日 10:04
  • 593

非议MFC

非议MFC(一)宏和类型定义的困惑                          非议MFC(一)宏和类型定义的困惑关键字:C++,MFC,宏,macro,define,typedef有感于MFC...
  • huntjap
  • huntjap
  • 2005年01月05日 11:31
  • 1259

MFC宏和全局成员

MFC宏和全局成员1 数据类型:BYTE 8位     无符号WORD 16位    无符号DWORD 32位   无符号LONG 32位    有符号UINT 16位或32位 无符号BOOL COL...
  • lovpro
  • lovpro
  • 2006年03月29日 11:22
  • 1211

MFC 中L 和 _T() 宏

_T("")是一个宏,定义在tchar.h下 . #define  _T(x) __T(x) #define  __T(x)  x #define __T(x)  L##x TCHAR...
  • x993407990
  • x993407990
  • 2015年03月09日 14:21
  • 490

MFC常用宏的分类及其作用与用法

1.MFC宏概述以及常用宏及作用    MFC宏是MFC类库的一个重要组成部分。在MFC应用程序中经常出现。根据用途,大致辞可分为消息映射宏,运行时类型识别宏,调试宏和异常处理宏等。    MFC...
  • szlcw1
  • szlcw1
  • 2014年02月27日 22:29
  • 869

MFC的消息处理机制及相关的宏

这段话是我在中文维基的“类成员函数指针”词条写的: MFC类体系中,Windows消息传递处理机制是基于CCmdTarget类及其派生类的静态数据成员与静态成员函数GetThisMessageMap(...
  • ligand
  • ligand
  • 2015年11月15日 08:42
  • 1423

通过宏定义来判断是否使用了MFC

#ifdef __AFX_H__ MessageBox(NULL, _T("定义了MFC"), _T(""), MB_ICONINFORMATION); #endif
  • ts1011
  • ts1011
  • 2013年05月25日 00:03
  • 1295

语言模型的评估-困惑度

语言模型评价 语言模型构造完成后,如何确定好坏呢? 目前主要有两种评价方法: 实用方法:通过查看该模型在实际应用(如拼写检查、机器翻译)中的表现来评价,优点是直观、实用,缺点是缺乏针对性、...
  • lujiandong1
  • lujiandong1
  • 2016年11月21日 15:25
  • 5128

MFC宏定义详解

AND_CATCH   AND_CATCH(exception_class,exception _object_point_name)   说明:   定义一个代码块,它用于获取废除当前TRY块中的附...
  • doubleuto
  • doubleuto
  • 2010年09月28日 11:53
  • 3803

蓝桥杯 Torry的困惑(基本型)(java题解)

问题描述   Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告...
  • qq_15370821
  • qq_15370821
  • 2016年06月02日 10:16
  • 328
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:非议MFC(一)宏和类型定义的困惑
举报原因:
原因补充:

(最多只允许输入30个字)