Скажи, что в файле 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
против просто внутри класса, где это?
Итак, вот мой вопрос: есть ли смысл определять бар внутри 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, но имеет дело со значениями столбцов, вам, вероятно, следует написать его отдельно.
Ну, в сущности, вы можете создавать объекты bar с объектами и функциями вне класса foo, как вы упомянули, и затем передавать его любому объекту foo, который вы делаете.
Однако, если бы вы определили его в классе, вы бы не смогли создать объекты bar, если сначала не создадите класс foo, что может привести к ненужным накладным расходам, если вы просто захотите перечислить объект.
И так, это действительно зависит от того, что вы собираетесь делать. Если вы планируете использовать bar только с классом foo, то было бы вполне приемлемо определить его там. В противном случае, если он будет доступен в другом месте, оставьте его как есть.