Если вы можете предоставить специализацию для bond::schema<T>
для структуры, не связанной с Bond, это даст достаточно метаданных во время компиляции о структуре, не связанной с Bond, так что многие из API Bond могут быть вызваныв не-сгенерированной Bond структуре, как transforms API.Например, сериализация std::tuple<T...>
реализуется с помощью специализации bond::schema<std::tuple<T...>>
.
C ++ - пока - не имеет отражения во время компиляции для структур.Существуют различные способы симуляции этого (например, Boost :: Fusion , схемы на основе макросов, инструменты генерации кода).Большая часть генерации кода B ++ для C ++ добавляет схему времени компиляции , которую позже использует библиотека.
Если структура C ++ и структура C ++, созданная Bond, имеют совместимую компоновку и оба Тривиально копируемое , вы можете использовать std::memcpy
для «приведения путем копирования» к структуре, сгенерированной Bond, а затем манипулировать структурой Bond по мере необходимости.Я бы обернул такое поведение во вспомогательный метод щедрыми static_assert
проверками, чтобы избежать неопределенного поведения по мере развития структур.Это будет работать только с очень ограниченными структурными формами: например, поля коллекции, скорее всего, сделают структуру нетривиально копируемой.Вам нужно использовать Bond версии 8.x или новее и последнюю версию вашего компилятора C ++ для сгенерированных структур Bond, чтобы вообще иметь возможность простого копирования.(См. Commit fa02289f , который удалил много ctor, отличных от заданных по умолчанию.)