我可以避免由特定类定义的限定名称吗?

sus*_*att 1 c++ enums naming scope class

假设我有一个沿着以下行的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);

    // ...
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我想抛出一个消息框,我必须输入MyMessageBox::每个标识符:

MyMessageBox::Show(MyMessageBox::Prior_Dialog, MyMessageBox::Icon_Question, MyMessageBox::Button_Yes, MyMessageBox::Button_No);
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要一些非宏解决方案,允许源文件#include "MyMessageBox.h"MyMessageBox::任何地方省略资格.这可能吗?

Luc*_*ore 7

是的,非常简单.如果你不想在enum类中使用s,那么......不要在类中定义它们.

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);
// ...
};
Run Code Online (Sandbox Code Playgroud)