У нас есть компонентный дизайн C ++, где каждый компонент состоит из открытого внешнего класса, который используется для группировки интерфейсов компонентов.Каждый интерфейс определен как вложенный класс, как показано ниже.
struct ComponentContainer {
class InterfaceClass_1 : public ComponentInterface {
public:
virtual ~InterfaceClass_1 () = 0;
virtual InterfaceClass_1* GetInterface() = 0;
virtual void InterfaceMethod1 () = 0;
virtual void InterfaceMethod2 () = 0;
};
class InterfaceClass_2 : public ComponentInterface {
public:
virtual ~InterfaceClass_2 () = 0;
virtual InterfaceClass_2* GetInterface() = 0;
virtual void InterfaceMethod1 () = 0;
virtual void InterfaceMethod2 () = 0;
};
};
Мой первый вопрос: правильно или не рекомендуется использовать класс в качестве контейнера для компонента?Правильнее ли заменить "struct ComponentContainer" на "пространство имен ComponentContainer"?
Так как классы интерфейса всегда общедоступны, я думал об изменении структуры, чтобы она выглядела следующим образом:
namespace ComponentContainer {
struct InterfaceClass_1 : ComponentInterface {
virtual ~InterfaceClass_1 () = 0;
virtual InterfaceClass_1* GetInterface() = 0;
virtual void InterfaceMethod1 () = 0;
virtual void InterfaceMethod2 () = 0;
};
struct InterfaceClass_2 : ComponentInterface {
virtual ~InterfaceClass_2 () = 0;
virtual InterfaceClass_2* GetInterface() = 0;
virtual void InterfaceMethod1 () = 0;
virtual void InterfaceMethod2 () = 0;
};
};
Является ли этот метод определения компонента предпочтительным для моего первого примера?Есть ли какие-то фундаментальные недостатки, на которые мне нужно обратить внимание?
Спасибо.