假设我有一个MessageBox类,如下所示:
class MyMessageBox
{
public:
enum Priority {
Prior_Dialog,
Prior_Warning,
// ...
};
enum Icon {
Icon_Question,
Icon_Exclamation,
// ...
};
enum Button {
Button_Yes,
Button_No,
Button_Cancel,
// ...
};
static void Show(Priority pPriority, Icon pIcon, Button pButton1, Button pButton2);
// ...
};
现在,如果我想抛出一个消息框,则必须为每个标识符键入
MyMessageBox::
:MyMessageBox::Show(MyMessageBox::Prior_Dialog, MyMessageBox::Icon_Question, MyMessageBox::Button_Yes, MyMessageBox::Button_No);
理想情况下,我想要一些非宏解决方案,该解决方案将允许
#include "MyMessageBox.h"
的源文件在任何地方都省略MyMessageBox::
限定词。这可能吗? 最佳答案
如果枚举和类在单独的命名空间中声明(即枚举应在类外部声明)只是而不污染全局命名空间,这可能会很方便。
namespace MessageBoxUtils {
enum Priority {
Prior_Dialog,
Prior_Warning,
// ...
};
enum Icon {
Icon_Question,
Icon_Exclamation,
// ...
};
enum Button {
Button_Yes,
Button_No,
Button_Cancel,
// ...
};
class MyMessageBox
{
public:
static void Show(Priority pPriority, Icon pIcon, Button pButton1, Button pButton2);
// ...
};
} // namespace MessageBoxUtils
客户端代码(某些cpp文件):
#include ...
using namespace MessageBoxUtils;
...
void SomeClass::Foo()
{
MyMessageBox::Show(Prior_Dialog, Icon_Question, ...);
}