首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

宏的有关问题,请教小弟我这么改能行吗?多谢了!80分酬谢!

2012-04-10 
宏的问题,请问我这么改能行吗?谢谢了!80分酬谢!!!帖子这么快就沉底了晕死(原贴在http://community.csdn.ne

宏的问题,请问我这么改能行吗?谢谢了!80分酬谢!!!
帖子这么快就沉底了   晕死
(原贴在http://community.csdn.net/Expert/topic/5566/5566846.xml?temp=.4114344)
再贴出来虚心求教,我这么这把这段宏改为类能行吗?

//   以下是宏
#define   START_EXPLAIN                                                                                           \
    private:                                                                                                                 \
    static   void   explain_macro()                       \
        {                                                                                                                                      


////////////////////////////////////////////////////////////////////////
#define   EXPLAIN(line){                                                         \
        std::string   anStr(line);\
        CPPUNIT::GlobalListener::instance()-> addInfo(   "EXPLAIN ",   anStr.c_str());   \
        }
////////////////////////////////////////////////////////////////////////
#define   END_EXPLAIN                                                                                                   \
        }                                                                                                                               \
    public:  

////////////////////////////////////////////////////////////////////////
#define   START_TEST(method)                                                                                       \
    private:                                                                                                                       \


    static   void   method##_explain()                             \
        {                                                                                                                                 \
       
////////////////////////////////////////////////////////////////////////
#define   TEST(line){                                                                                                     \
        std::string   anStr(line);                                                                 \
        CPPUNIT::GlobalListener::instance()-> addInfo(   "TEST ",   anStr.c_str());   \
        }

////////////////////////////////////////////////////////////////////////
#define   END_TEST                                                                                                           \
        }                                                                                                                                 \
    public:


\\更改后的类
class   explain  
{
public:  
        //   Constructor
        explain(char   *line)){      
                std::string   anStr(line);      
                CPPUNIT::GlobalListener::instance()-> addInfo( "EXPLAIN ",   anStr.c_str());  
};
        //   Destructor
virtual   ~explain();

public:
        char   *line;
};

class   test
{
public:  
        //   Constructor
        test(char   *line)){      
                std::string   anStr(line);      
                CPPUNIT::GlobalListener::instance()-> addInfo( "TEST ",   anStr.c_str());  


        };
        //   Destructor
        virtual   ~test();
       
public:
        char   *line;
};



[解决办法]
我认为可以改,不过似乎没有这个必要,而且改起来比较麻烦

楼主改的我认为不一定正确,这可能要看具体的应用场合:
1,原宏定义的函数是private,按照我的理解应该是只能在当前文件中被调用,类的成员函数似乎定义为private更为合适,但是在这样在别的文件中,就无法调用,需要类提供另外一个的成员函数给使用者

2,更改后的类:数据成员是public,失去了数据封装的意义

class explain
{
public:
// Constructor
explain(char *line)){
std::string anStr(line);
CPPUNIT::GlobalListener::instance()-> addInfo( "EXPLAIN ", anStr.c_str());
//只有构造函数,没有方法,别人怎么用??
};
// Destructor
virtual ~explain();

public:
char *line;//有必要吗
};



[解决办法]
好晕看不明白,帮顶
[解决办法]
如果只是想把宏改成类,处理的时候自动调用构造函数,实现addInfo的功能的话,
楼主改的代码应该没问题。只是没有必要加上char *line这个成员,因为原来的代码中char*line只是作为参数来用的。使用的时候直接使用带参数的构造函数去构造这个类的实例就可以了。
[解决办法]
生成宏,总是为了避免多个类出现大段的相同(并且无法用继承来统一的)代码。
把它封装成类,基本是自讨没趣。

热点排行