假设我有一个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, ...);
}

08-17 19:06