2013-03-16 81 views
5

我的枚舉類(VS2012)的用法:靜態導入++ 11(如枚舉類)

class matrix { 
public: 
    enum class operation_type {ADD, MULT}; 
    matrix(operation_type op); 
... 
} 

而在另一個片段我用

matrix* m = new matrix(matrix::operation_type::ADD); 

如果名稱是長,這變得非常混亂。

是否有可能以某種方式導入枚舉值,這樣我可以這樣寫:

matrix* m = new matrix(ADD); 

同樣的問候嵌套類 - 我可以導入它們?

回答

4

,這是不可能的。

你不能忽略operation_type部分,因爲你已經做了範圍枚舉(這就是範圍枚舉的全部內容)。如果你想避免它,你必須使它成爲一個無可比擬的enum(刪除class關鍵字)。

此外,在matrix之外,不能通過using聲明導入成員名稱,就好像matrix是名稱空間一樣。此外,根據C++ 11標準的第7.3.3/7段:

使用聲明不應該命名作用域枚舉器。

+0

你的意思是如果我有'class A {public:class B {}}'那麼我不能寫'使用A :: B',對吧? – 2013-03-16 14:18:02

+0

@JoshuaMN:我相信你只能這樣做,如果你寫在'A'的子類中。 – 2013-03-16 14:21:26