1
對於我的項目,我想擴大先前在基類中聲明爲受保護的枚舉的可見性。先前聲明爲受保護的枚舉的訪問枚舉器
class A {
protected:
enum E { e = 0 };
};
class B : public A {
public:
using A::E;
};
int main()
{
B::E enum1; // okay
enum1 = B::e; // fails: test.cpp:3:14: error: A::E A::e is protected
}
造成這種情況的原因很簡單:
- 我不控制的基類,所以我不能只是讓
E
公共 - 我不想要一個巨大的switch-case語句在
B
和A::E
一個新的枚舉之間的轉換,我期望(ED)的代碼編譯就好了。
我很好奇。代碼無法編譯的科學解釋是什麼?
*後*張貼這我已經注意到,http://stackoverflow.com/questions/9814074/rationale-behind- enum-access-semantics-in-c?rq = 1給出了足夠好的推理。使用簡單的C++ 03枚舉不會引入新的作用域,因此*枚舉符*仍然會轉到周圍的作用域。定義「使用A :: E'」當然不會改變這個事實,並且只是使枚舉本身公開,而不是名稱。 – kfunk 2013-02-25 10:28:47