创建以宏包装的对象的声明

时间:2010-06-09 17:30:42

标签: c++ macros header declaration

我们的代码中定义了以下宏:

#define  MSGMacro(obj, arg)  MyPaymentClass obj(arg)

其中MSGMacro用于使用

等代码创建MyPaymentClass类型的对象
MSGMacro(Card, 1);
MSGMacro(Cash, 2);
----
---- //removed unwanted things to keep question cleaner. 

以上所有代码都在一个cpp文件中,现在问题是我们如何将MyPaymentClass的这两个对象暴露给我项目中的其他单元? 即我想在其他CPP文件中使用CardCash。请建议我如何在一些头文件中给出相同的声明?

4 个答案:

答案 0 :(得分:1)

我无法弄清楚为什么你会在这种情况下使用宏,它就像声明对象一样容易。至于暴露这些实例,你可以使它们成为全局静态对象,但这通常是不受欢迎的。您应该弄清楚这些对象与应用程序其余部分的关系,并找到一个合适的位置,以便将它们公开给代码的其余部分。

答案 1 :(得分:1)

您可以创建访问者功能:

const MyPaymentClass &getCard()
{
    return card;
}

您还需要将该函数的原型添加到头文件中:

const MyPaymentClass &getCard();

答案 2 :(得分:1)

创建另一个宏来声明这些变量:

/* example.h */
#define MSGMacroDeclare(obj) extern MyPaymentClass obj;
MSGMacroDeclare(Card);
MSGMacroDeclare(Cash);
...

/* example.cpp */
#define MSGMacroDefine(obj, arg) extern MyPaymentClass obj(arg);
MSGMacroDefine(Card, 1);
MSGMacroDefine(Cash, 2);
...

最终,如果你想要相同的文件到booth声明并定义它们,你可以像这样使用:

/* example.h */
#ifndef MSGMacro
     #define MSGMacro(obj, arg) extern MyPaymentClass obj
#endif
MSGMacro(Card, 1);
MSGMacro(Cash, 2);
...

/* example.cpp */
#define MSGMacro(obj, arg) extern MyPaymentClass obj(arg)
#include "example.h"

但这只有在有很多很多这些(很多全局数据?嗯......)并且列表经常更改时才有意义,通常这是不寻常的

答案 3 :(得分:0)

这些全球对象吗?然后,一个简单的extern MyPaymentClass Card;extern MyPaymentClass Cash;应该可以解决问题(关于全局变量的适当性的讨论)。

当然,您也可以将这些对象的引用或指针传递给其他函数,无论它们是否是全局变量(但如果它们不是静态的,您仍然需要考虑这些对象的生命周期) /全局)。