gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:28:02 25 4
gpt4 key购买 nike

我想到了这种模式,它允许将基类用作其派生类的 namespace ,如果事先知道所有派生类,这可能会很巧妙。这看起来不错的一种情况是当你想为你的子类使用形容词时。这个图案有名字吗?

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

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

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

最佳答案

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

嵌套类不能是 using 声明的主题,因此如果没有 typedef,您将别无选择,只能引用 Flag::Checked 而不是客户端代码中的 Chequered。正如你提到的,所有的衍生品都必须事先知道。如果没有 class Flag 的定义,它们就不能被前向声明。简单地拥有一个封闭的 namespace 有很多好处,例如允许您将运算符从 std::relops 应用于类的集群。

美学永远无法弥补语言滥用。这是一个替代方案:

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

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

我不知道使用形容词命名类的做法的名称,但它看起来不错。短名称很好,:: 运算符总是有助于实现这一点。

关于c++ - C++ 中是否有这种模式的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14449641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com