Инкапсуляция частного перечисления - PullRequest
4 голосов
/ 03 декабря 2009

Ранее я определил перечислимые типы, которые должны быть закрытыми, в заголовочном файле класса.

private:
  enum foo { a, b, c };

Тем не менее, я не хочу, чтобы детали перечисления больше раскрывались. Похоже ли определение перечисления в реализации на определение инвариантов класса?

const int ClassA::bar = 3;
enum ClassA::foo { a, b, c };

Мне интересно, правильный ли это синтаксис.

Ответы [ 2 ]

9 голосов
/ 03 декабря 2009

C ++ не имеет предварительных объявлений перечислений, поэтому вы не можете отделить перечисление "тип" от перечисления "реализация".

В C ++ 0x возможно следующее:

// foo.h
class foo {
   enum bar : int; // must specify base type
   bar x; // can use the type itself, members still inaccessible
};

// foo.cpp
enum foo::bar : int { baz }; // specify members
2 голосов
/ 03 декабря 2009

Нет, enum ClassA::foo { a, b, c }; неверный синтаксис.

Если вы хотите переместить перечисление из заголовка в файл реализации (.cpp), просто сделайте это. Если вы хотите использовать перечисление для типов параметров методов класса, вы не можете его переместить, поэтому просто оставьте его закрытым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...