В C++ ISO нет никакого обязательства для перечисления, чтобы быть больше, чем его самый большой перечислитель требует. В частности, перечисление {ПРАВДА, ЛОЖЬ} может иметь sizeof (1) даже когда sizeof (bool) == sizeof (интервал). Нет просто никакого требования. Некоторые компиляторы делают перечисления тем же размером как интервал. Это - функция компилятора, которая позволяется, потому что стандарт только налагает минимум. Другие компиляторы используют расширения для управления размером перечисления.
Насколько я знаю, нет ничего готового, что дает возможность напрямую в qt. Есть несколько возможных подходов.
Реализуйте поля как Q_PROPERTY, затем они отражаются через систему Metaclass и могут использоваться для реализации общих функций DAO.
Вы все еще можете использовать QSqlTableModel, но инкапсулировать записи с транзакциями, если транзакция не удалась, обновите модель из БД. Осуществимость зависит от размера данных, которые вы храните в модели.
В настоящее время мы используем подход на основе TableModel / QSqlRecord для чтения и записи, в нашей системе не выполняется сопоставление ORM.
Tegesoft недавно выпустила новую версию своей библиотеки под названием CAMP , которая обеспечивает отражение времени выполнения C ++, как вы используете в .Net. Я думаю, это позволит вам реализовать свое приложение, как в .Net.
Также имеется новая библиотека ORM C ++ с открытым исходным кодом: QxOrm . QxOrm основан на модуле QtSql Qt для связи с базой данных и boost :: serialization для сериализации ваших данных в xml и двоичном формате. Веб-сайт на французском языке, но быстрый пример кода и учебный код на английском языке (перевод находится в процессе ...).
Если вам нужен ORM, который зависит только от Qt и опирается на систему мета-объектов Qt для обеспечения интроспекции, вы можете попробовать QDjango. Помимо основных операций создания/обновления/удаления на уровне модели, он предоставляет класс шаблона queryset (по образцу querysets от django), который позволяет строить достаточно сложные поиски. Также ведется интеграция QtScript.