Question

boost :: variante affirme que il est un type de valeur. Est-ce que cela signifie qu'il est sûr de simplement écrire la représentation brute d'un boost :: variante et le charger de nouveau plus tard, tant qu'il ne contient que les types POD? On suppose qu'il sera rechargé par le code compilé par le même compilateur, et même version de boost, sur la même architecture.

En outre, (probablement) de manière équivalente, peut stimuler :: variante être utilisée en mémoire partagée?

Était-ce utile?

La solution

En ce qui concerne la sérialisation: Il devrait fonctionner, oui. Mais pourquoi ne pas utiliser le mécanisme de visite de boost::variant pour écrire le type réel contenu dans la variante?

struct variant_serializer : boost::static_visitor<void> {
    template <typename T>
    typename boost::enable_if< boost::is_pod<T>, void>::type
    operator()( const T & t ) const {
        // ... serialize here, e.g.
        std::cout << t;
    }
};

int main() {

    const boost::variant<int,char,float,double> v( '1' );

    variant_serializer s;
    boost::apply_visitor( s, v );

    return 0;
}

En ce qui concerne la mémoire partagée: boost::variant ne fonctionne pas les allocations de tas, de sorte que vous pouvez le placer dans la mémoire partagée comme un int, en supposant une synchronisation correcte, bien sûr

.

Inutile de dire que, comme vous le dites, ce qui précède est valable uniquement si la variante ne peut contenir que les types POD.

Autres conseils

Essayez tout y compris boost / sérialisation / variant.hpp; il fait le travail pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top