在kotlin中,有一种设计模式,您可以使用密封的类模拟具有关联值的快速枚举,并使用嵌套类从其继承]]
例如斯威夫特有:
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 -...] >
仅向前声明您的派生类:
class ActionToPerform
{
public:
class ClearItems;
};
class ActionToPerform::ClearItems: public ActionToPerform
{ };