2013-03-16 3 views
5

моего использования класса перечислений (VS2012):Статический импорта в C++ 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

No, это невозможно.

Вы не можете опустить operation_type части, потому что вы сделали это области действия перечисления (и это то, что область действия перечисления все о). Если вы хотите этого избежать, вы должны сделать его незанятым enum (удалив ключевое слово class).

Кроме того, за пределами matrix вы не можете импортировать имя участника через объявление using, как если бы matrix было пространством имен. Кроме того, в соответствии с параграфом 7.3.3/7 стандарта C++ 11:

В декларации использования не указывается перечислитель с областью.

+0

Вы имеете в виду, если у меня есть 'class A {public: class B {}}', тогда я не могу написать 'using A :: B', правильно? –

+0

@JoshuaMN: Я считаю, что вы можете сделать это только в том случае, если вы напишете его в подклассе 'A'. –