• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 13次 | 进入软件测试论坛讨论

领测软件测试网

                          非议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
//...


延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网