使用boost::序列化来序列化TAO/CORBA对象
Serializing TAO/CORBA objects with boost::serialization
我在序列化由corba生成的类时遇到了一个问题——特别是对于任何类型的序列——TAO::unbouded_value_sequence、TAO::unbouded_basic_string_sequence等。
对于CORBA结构的序列化是否有任何"好的"解决方案,或者我是否需要对CORBA类的代码进行反向工程,并尝试为每个类编写序列化函数?
编辑: 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定义生成的示例代码。
我安装了ACE+TAO框架,摆弄了一下。¹
看起来从实际的IDL更容易。
解析IDL的代码包含在SDK中,所以也许您可以利用它来生成一些序列化代码。
旁注:为什么Boost序列化已经完全实现了IIOP序列化的东西?您是否可以考虑使用ACE序列化来Boost序列化二进制缓冲区?如果不是,为什么不呢?
¹实际编译代码:http://paste.ubuntu.com/12907686/
感谢@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);
}
} }
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 提升序列化 1:73 的向后兼容性问题
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 如何反序列化数组?
- 如何使用提升序列化?
- 序列化多晶型接口
- 使用boost::序列化来序列化TAO/CORBA对象