CORBA sequence用于客户端与服务器批量数据的传递,使用类似数组
示例定义:
module AService //! 服务名
{
struct A //! 定长结构
{
long lA;
long lA1;
}
typedef sequence<A> ASeq;
struct B //! 变长结构
{
long lB1;
string lB2;
}
typedef sequence<B> BSeq;
}
1 sequence的根据模板类型不同,IDL编译后,产生两种类型,分别是 定长与变长,例子中产生的分别是
//! 生成的定长序列
class ASeq;
typedef
TAO_FixedSeq_Var_T< //! 定长
ASeq,
A
>
ASeq_var;
typedef
TAO_Seq_Out_T<
ASeq,
ASeq_var,
ADB
>
ASeq_out;
class ASeq : public TAO_Unbounded_Sequence<A>
{
//! ....;
};
//! 生成的变长序列
class BSeq;
typedef
TAO_VarSeq_Var_T< //! 变长
BSeq,
B
>
BSeq_var;
typedef
TAO_Seq_Out_T<
BSeq,
BSeq_var,
B
>
CirculationDataDBSeq_out;
class BSeq : public TAO_Unbounded_Sequence<B>
{
//! ...;
}
变长var与定长var的访问方法 是不同的
ASeq_var tempAs;
tempAs[i].lA = 1;
BSeq_var tempBs;
(*tempBs)[i].lB = 1;
2 用法: 服务端开辟相应的内存空间,客户端负责释放
服务端开辟空间:
ASeq_out res = new ASeq;
res->length(Size);
客户端使用后 释放
BSeq_var res;
res->length(0);