我们的代码中定义了以下宏:
#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文件中使用Card
和Cash
。请建议我如何在一些头文件中给出相同的声明?
答案 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;
应该可以解决问题(关于全局变量的适当性的讨论)。
当然,您也可以将这些对象的引用或指针传递给其他函数,无论它们是否是全局变量(但如果它们不是静态的,您仍然需要考虑这些对象的生命周期) /全局)。