Переслать объявленный enum как переменную члена класса - PullRequest
0 голосов
/ 10 апреля 2020

Как правило при предварительном объявлении (из «API Design for C ++», стр. 214), я включаю заголовок класса только в том случае, если I:

  • использует объект этого класса в качестве члена данных в моем собственном классе или
  • наследует от этого класса.

В во всех остальных случаях я просто объявил класс.

Однако недавно я случайно использовал в качестве члена данных класса форвард объявленного класса enum , и он скомпилирован.

Это действительно нормально для использования, или просто случайный взлом (и мне действительно нужен заголовок с определением MyEnum)?

// test.hpp
enum class MyEnum;

class A {
    MyEnum myenum;
};

1 Ответ

0 голосов
/ 10 апреля 2020

Объявленный вперед класс enum имеет указанный базовый тип. Если явно не указано, это int. Из-за этого размер хранилища enum известен, даже если он объявлен только вперед, поэтому его использование в качестве члена не является проблемой.

...