2013-03-16 80 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