Как насчет этого подхода:
IN="bla@some.com;john@home.com"
set -- "$IN"
IFS=";"; declare -a Array=($*)
echo "${Array[@]}"
echo "${Array[0]}"
echo "${Array[1]}"
По поводу сериализации: Да, должно работать. Но почему бы вам не использовать механизм посещения 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.
Попробуйте просто включить boost / serialization / variant.hpp; он делает всю работу за вас.