C ++嵌套类,它从外部类继承;不允许输入不完整的类型

问题描述 投票:3回答:1

在kotlin中,有一种设计模式,您可以使用密封的类模拟具有关联值的快速枚举,并使用嵌套类从其继承]]

https://medium.com/@da_pacheco/using-kotlins-sealed-class-to-approximate-swift-s-enum-with-associated-data-7e0abac88bbf

例如斯威夫特有:

enum Barcode {
  case UPCA(Int, Int, Int, Int)
  case QRCode(String)
}

科特琳模仿:

sealed class Barcode {
  class UPCA(val system: Int, val manufacturer: Int, val product: Int, val check: Int) : Barcode()
  class QRCode(val productCode: String) : Barcode()
}

然后,您可以执行Barcode列表并遍历它们的所有操作。

您还可以在Java和C#中使用此模式...没有“密封的类”,因此您不能阻止将来的人扩展此列表,但是它足够接近并且非常方便。

所以现在我正尝试在C ++中执行此操作,并且收到错误消息“不允许输入不完整的类型”

class ActionToPerform
{
public:
  class ClearItems: public ActionToPerform
  { };
};

这在某种意义上是因为在编译器启动ActionToPerform时尚未完全声明ClearItems类型,但是它也很笨拙且令人讨厌。我可以将ClearItems类从ActionToPerform中移出,但是我失去了作用域/命名空间的好处。

有没有解决的办法?还是这仅仅是C ++的固有限制?

在kotlin中,有一种设计模式,您可以使用密封的类来模拟具有关联值的快速枚举,并使用嵌套类从其继承https://medium.com/@da_pacheco/using -...] >

c++ enums algebraic-data-types
1个回答
4
投票

仅向前声明您的派生类:

class ActionToPerform
{
public:
  class ClearItems;
};

class ActionToPerform::ClearItems: public ActionToPerform
{ };
© www.soinside.com 2019 - 2024. All rights reserved.