読者です 読者をやめる 読者になる 読者になる

enumの先行宣言を使って定義を分ける

C++

C++11ではenumの先行宣言ができるようになったので、それによってpImplイディオムと同じようにクラス内で宣言した場合に定義を分けることができます。

#include <iostream>
#include <string>

struct X {
    enum E : int; // 先行宣言
};

enum X::E : int { // 定義
    A, B, C
};

std::string f(X::E e)
{
    switch (e) {
        case X::A: return "A";
        case X::B: return "B";
        case X::C: return "C";
    }
}

int main()
{
    std::cout << f(X::A) << std::endl;
}
A