Определить перечисление в классе или в файле?

Скажи, что в файле foo.h у меня есть:

enum bar {
ONE = 1,
TWO
};

class foo {
bar m_bar;
public:
void setBar(bar arg){ m_bar = arg; }
bar getBar() const { return m_bar; }
};

В моем нынешнем дизайне единственная стойкая bar переменная будет m_bar, Но у меня будут другие функции, кроме foo которые содержат barНапример, класс GUI, который создает локальный bar и передает его setBar,

Итак, вот мой вопрос, есть ли основания для определения bar публично внутри foo против просто внутри класса, где это?

0

Решение

Итак, вот мой вопрос: есть ли смысл определять бар внутри foo, а не внутри класса, где он находится?

Если все функции, которые создают / работают с bar, связаны с функциональностью foo, тогда вполне приемлемо написать это так:

class foo
{
enum bar {
ONE = 1,
TWO
};
};

void process_bar_of_foo(foo::bar bar_value); // process the bar of a foo

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

2

Другие решения

Ну, в сущности, вы можете создавать объекты bar с объектами и функциями вне класса foo, как вы упомянули, и затем передавать его любому объекту foo, который вы делаете.

Однако, если бы вы определили его в классе, вы бы не смогли создать объекты bar, если сначала не создадите класс foo, что может привести к ненужным накладным расходам, если вы просто захотите перечислить объект.

И так, это действительно зависит от того, что вы собираетесь делать. Если вы планируете использовать bar только с классом foo, то было бы вполне приемлемо определить его там. В противном случае, если он будет доступен в другом месте, оставьте его как есть.

0

По вопросам рекламы [email protected]