基于C ++组件的设计的struct vs namespace

时间:2010-08-02 15:22:29

标签: c++ oop components

我们有一个基于组件的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;
    };
};

我的第一个问题是,使用类作为组件的容器是否正确/建议?用“namespace ComponentContainer”替换“struct ComponentContainer”更正确吗?

由于Interface类总是公开的,我一直在考虑将结构更改为:

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;
    };
};

这种定义组件的方法比我的第一个例子更好吗?我需要注意哪些根本缺陷?

感谢。

1 个答案:

答案 0 :(得分:3)

struct和namespace方法之间的主要区别:

  • struct方法将要求包含的所有接口类在同一文件中声明。命名空间可以添加到多个文件中。换句话说:您可以使用多个文件来扩展命名空间ComponentContainer,而使用struct
  • 则无法做到这一点
  • 有人可能会尝试实例化包装结构并使用它执行操作。甚至有人可能想要在包装结构中添加功能
  • 您可以在命名空间中使用“using”语句 - 我不确定它是否真的适用于该结构。