Все началось просто.
Я создал пару классов. Чтобы упростить обслуживание, я определил структуру под названием Parameters
для каждого класса. Эти параметры регулярно меняются. Это было легко и удобно. Я мог бы создать параметры, используя A :: Parameters или B :: Parameters, мог передавать их, возвращать их и так далее ... Параметры действительно принадлежали конкретному классу, но иногда они мне также нужны где-то снаружи.
class A{
public:
struct Parameters{
int a;
}
private:
Parameters para;
}
class B{
public:
struct Parameters{
double b;
}
private:
Parameters para;
}
Со временем мой Parameters
становился все более и более сложным. Я даже начал с добавления некоторых простых функций и вскоре после некоторых более сложных функций. Теперь они больше не ощущают себя структурой, они больше похожи на собственный класс. Я знаю, что разница между классом и структурой очень мала в C ++, но я использую структуры главным образом для хранения необработанных данных и классов для всего остального.
Поэтому я решил изменить их на классы:
class A{
public:
class Parameters{
int a;
}
private:
Parameters para;
}
class B{
public:
class Parameters{
double b;
}
private:
Parameters para;
}
Все работает хорошо, за исключением того, что это действительно немного неудобно для меня. Иногда я определяю классы в классах, но в основном как частный класс, и в большинстве случаев он очень маленький и простой без большого количества кода. В этом случае здесь исходный код становится действительно грязным. Я хотел бы иметь собственный файл для этих классов параметров сейчас.
Теперь я вижу пару возможностей и не могу решить, какая из них лучше:
Должен ли я создать новый файл Parameters.cpp
/ Parameters.h
и сохранить каждый класс Parameters
в соответствующем пространстве имен, например:
namespace A{ class Parameters{ int a; } }
namespace B{ class Parameters{ double b; } }
Это тогда эквивалентно определению классов Parameters
в классе A
/ B
?
Должен ли я создать собственный файл для каждого из классов и поместить класс в пространство имен A
или B
?
(Я бы не хотел менять имя класса Parameter
на A_Parameters
, B_Parameters
и т. Д.)
Или как-то можно объявить класс только в A
class A{ public: class Parameters; }
и поместите определение класса где-нибудь еще (в другом файле). Обратите внимание, что я создаю экземпляры Parameters
в классе A
.
Полагаю, главный вопрос в том, что считается хорошей практикой / что бы вы сделали? Один класс на файл, несколько пространств имен в одном файле, переименование классов ...