C++ 在宏中为其包装创建的对象的声明

C++ 在宏中为其包装创建的对象的声明,c++,macros,header,declaration,C++,Macros,Header,Declaration,我们的代码中定义了以下宏: #define MSGMacro(obj, arg) MyPaymentClass obj(arg) 其中,MSGMacro用于使用类似于 MSGMacro(Card, 1); MSGMacro(Cash, 2); ---- ---- //removed unwanted things to keep question cleaner. 以上所有代码都在一个cpp文件中,现在的问题是如何将MyPaymentClass的这两个对象公开给我项目中的其他单位? i

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

#define  MSGMacro(obj, arg)  MyPaymentClass obj(arg)
其中,
MSGMacro
用于使用类似于

MSGMacro(Card, 1);
MSGMacro(Cash, 2);
----
---- //removed unwanted things to keep question cleaner. 
以上所有代码都在一个cpp文件中,现在的问题是如何将
MyPaymentClass
的这两个对象公开给我项目中的其他单位?
i、 e.我想在其他CPP文件中使用
现金
。请建议我如何在某些头文件中声明相同的内容?

我不明白为什么要在这种情况下使用宏,声明对象同样简单。至于公开这些实例,您可以使它们成为全局静态对象,但这通常是不赞成的。您应该找出这些对象与应用程序其余部分的关系,并找到适当的位置将它们公开给代码的其余部分。

我不明白为什么要在这种情况下使用宏,声明对象同样容易。至于公开这些实例,您可以使它们成为全局静态对象,但这通常是不赞成的。您应该找出这些对象与应用程序其余部分的关系,并找到适当的位置将它们公开给代码的其余部分。

您可以创建访问器函数:

const MyPaymentClass &getCard()
{
    return card;
}
您还需要将该函数的原型添加到头文件:

const MyPaymentClass &getCard();

您可以创建访问器函数:

const MyPaymentClass &getCard()
{
    return card;
}
您还需要将该函数的原型添加到头文件:

const MyPaymentClass &getCard();

这些是全局对象吗?然后是一张简单的
externMyPaymentClass卡
外部MyPaymentClass现金应该做到这一点(省略了关于全局变量适当性的讨论)


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

这些是全局对象吗?然后是一张简单的
externMyPaymentClass卡
外部MyPaymentClass现金应该做到这一点(省略了关于全局变量适当性的讨论)


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

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

/* 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);
...
最终,如果您希望声明和定义相同的文件,您可以使用如下内容:

/* 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"

但只有当这些变量很多很多(很多全局变量?嗯…)并且列表经常更改时,这才有意义,通常这是不寻常的

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

/* 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);
...
最终,如果您希望声明和定义相同的文件,您可以使用如下内容:

/* 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"

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

我还想知道这些宏的值,但也许它们已经被简化为在这里发布一个问题了?你是对的,Michael,这些东西被清理并重新编写,只是为了清晰地发布问题。我还想知道这些宏的价值,但也许他们已经简化了在这里发布一个问题?你是对的,Michael,这些东西已经清理并重新编写,只是为了清晰地发布问题。