从外部类继承的C ++嵌套类;类型不完整

猎户座爱德华兹

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

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

Kotlin模仿:

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 ++的固有限制?

艾伦·伯特尔斯

只是向前声明您的派生类:

class ActionToPerform
{
public:
  class ClearItems;
};

class ActionToPerform::ClearItems: public ActionToPerform
{ };

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章