在kotlin中,有一种设计模式,您可以使用密封的类模拟具有关联值的swift枚举,并使用嵌套类从其继承
例如; 斯威夫特有:
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] 删除。
我来说两句