我在序列化corba生成的类时遇到问题-尤其是任何序列-TAO :: unbouded_value_sequence,TAO :: unbouded_basic_string_sequence等。
是否有任何“好的”解决方案可用于CORBA结构的序列化,或者我已经对corba clase的代码进行了反向工程并尝试为它们中的每一个编写序列化函数?
编辑:
struct Something;
typedef
TAO_Var_Var_T<
Something
>
Something_var;
typedef
TAO_Out_T<
Something
>
Something_out;
struct Something
{
typedef Something_var _var_type;
typedef Something_out _out_type;
static void _tao_any_destructor (void *);
TAO::String_Manager member1;
};
class SequenceOfSomething;
typedef
TAO_VarSeq_Var_T<
SequenceOfSomething
>
SequenceOfSomething_var;
typedef
TAO_Seq_Out_T<
SequenceOfSomething
>
SequenceOfSomething_out;
class SequenceOfSomething
: public
TAO::unbounded_value_sequence<
Something
>
{
public:
SequenceOfSomething (void);
SequenceOfSomething ( ::CORBA::ULong max);
SequenceOfSomething (
::CORBA::ULong max,
::CORBA::ULong length,
SequenceOfSomething* buffer,
::CORBA::Boolean release = false
);
SequenceOfSomething (const SequenceOfSomething &);
virtual ~SequenceOfSomething (void);
static void _tao_any_destructor (void *);
typedef SequenceOfSomething_var _var_type;
typedef SequenceOfSomething_out _out_type;
};
这是从IDL定义生成的一些示例代码。
感谢@sehe,这似乎可以正常工作:
namespace boost { namespace serialization {
template <typename Archive, typename T>
inline void save(Archive& ar, const TAO::unbounded_value_sequence<T>& varSequence, unsigned int /*version*/)
{
size_t length = varSequence.length();
ar & length
& boost::serialization::make_array(varSequence.get_buffer(), varSequence.length());
}
template <typename Archive, typename T>
void load(Archive& ar, TAO::unbounded_value_sequence<T>& varSequence, unsigned int /*version*/)
{
size_t length;
ar & length;
varSequence.length(length);
ar & boost::serialization::make_array(varSequence.get_buffer(), varSequence.length());
}
template <typename Archive, typename T>
inline void serialize(Archive& ar, TAO::unbounded_value_sequence<T>& varSequence, const unsigned int version)
{
split_free(ar, varSequence, version);
}
template <class Archive>
inline void serialize(Archive& ar, SequenceOfSomething& seq, unsigned int version)
{
ar & base_object<TAO::unbounded_value_sequence<Something>>(seq);
}
} }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句