在C ++中是否有这种模式的名称?

时间:2013-01-22 00:30:18

标签: c++ design-patterns

我已经想到了这种模式允许使用基类作为其衍生物的命名空间,如果事先知道所有衍生物,这可能很简洁。这种情况看起来不错的一种情况是当你想为你的子类使用形容词时。这种模式有名字吗?

class Flag
{
public:
  class White;
  class Chequered;
  // ...
};

class Flag::White: public Flag
{
  // ...
};

class Flag::Chequered: public Flag
{
  // ...
};

2 个答案:

答案 0 :(得分:4)

使用类作为命名空间是一种反模式。请改用namespace

嵌套类不能成为using声明的主题,因此如果没有typedef,您将别无选择,只能引用Flag::Chequered而不是Chequered在客户端代码中。正如您所提到的,所有衍生品必须事先知道。如果没有class Flag的定义,则无法向前声明它们。简单地包含namespace就可以让您将std::relops中的运算符应用到类集群中。

美学永远不会弥补语言滥用。这是另一种选择:

namespace flags {
class Base;
class White;
class Chequered;
}

typedef flags::Base Flag; // independent concept goes into enclosing namespace

我不知道使用形容词来命名类的实践名称,但它看起来不错。短名称很好,::运算符总是有帮助。

答案 1 :(得分:2)

它们被称为极其复杂的命名空间,而没有实际使用关键字namespace

虽然这个概念本身被称为Inner class,但在Java等某些语言中并不罕见。