В kotlin существует шаблон проектирования, в котором вы можете имитировать c быстрое перечисление со связанными значениями с использованием закрытого класса и наследование от него с помощью вложенного класса
https://medium.com/@da_pacheco / using-kotlins-sealed-class-to-приближенный-swift-s-enum-with-data-7e0abac88bbf
Например; Swift имеет:
enum Barcode {
case UPCA(Int, Int, Int, Int)
case QRCode(String)
}
Kotlin mimics:
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
isn не полностью объявлен в момент, когда компилятор принимает ClearItems
, однако это также глупо и раздражает. Я могу переместить класс ClearItems
из ActionToPerform
, но тогда я потеряю преимущество в области определения объема / пространства имен.
Есть ли способ обойти это? или это просто присущий C ++ предел?