Это безопасный сериализировать необработанное повышение:: вариант?

Как насчет этого подхода:

IN="bla@some.com;john@home.com" 
set -- "$IN" 
IFS=";"; declare -a Array=($*) 
echo "${Array[@]}" 
echo "${Array[0]}" 
echo "${Array[1]}" 

Источник

6
задан bdonlan 28 July 2009 в 18:57
поделиться

2 ответа

По поводу сериализации: Да, должно работать. Но почему бы вам не использовать механизм посещения boost :: variant , чтобы записать фактический тип, содержащийся в варианте?

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

Относительно общей памяти: boost :: variant делает не выполнять выделение кучи, поэтому вы можете поместить его в общую память так же, как int , при условии, конечно, правильной синхронизации.

Излишне говорить, что, как вы сказали, приведенное выше верно только в том случае, если вариант может содержать только типы POD.

7
ответ дан 8 December 2019 в 05:56
поделиться

Попробуйте просто включить boost / serialization / variant.hpp; он делает всю работу за вас.

15
ответ дан 8 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: