Frage

Boost :: Variante behauptet, dass es sich um einen Werttyp handelt. Bedeutet dies, dass es sicher ist, einfach die rohe Darstellung eines Boost :: Variante auszuschreiben und später zurückzuladen, solange sie nur Pod -Typen enthält? Angenommen, es wird durch den Code, der von demselben Compiler und derselben Version von Boost zusammengestellt wird, auf derselben Architektur neu geladen.

Kann auch (wahrscheinlich) gleichwertig :: Variante im gemeinsamen Speicher steigern?

War es hilfreich?

Lösung

In Bezug auf Serialisierung: Es sollte funktionieren, ja. Aber warum benutzt du nicht? boost::variant'S Visitation Mechanismus, um den in der Variante enthaltenen tatsächlichen Typ aufzuschreiben?

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;
}

In Bezug auf gemeinsame Speicher: boost::variant führt keine Heap -Zuweisungen durch int, Natürlich unter der Annahme einer ordnungsgemäßen Synchronisation.

Unnötig zu erwähnen, wie Sie sagten, ist das oben genannte nur dann gültig, wenn die Variante nur POD -Typen enthalten kann.

Andere Tipps

Versuchen Sie, nur Boost/Serialisation/Variante zu beinhalten.HPP; Es macht die Arbeit für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top