为什么CORBA接口有返回类型和out关键字?

时间:2015-10-22 16:07:58

标签: rpc corba idl

I was reading about CORBA我发现了一些有趣的东西。 CORBA接口方法使用返回类型定义,例如

中的string
module HelloApp
{
  interface Hello
  {
  string sayHello();
  oneway void shutdown();
  };
};

并且还有一个关键字out,当它作为参数传递时,表示返回值。 For example here

struct Data { ... };
typedef sequence<Data> DataSeq;
interface DataIterator {
  DataSeq next_n_items(in unsigned long how_many);
  void    destroy();
};
interface SearchEngine {
  DataSeq query(
             in  string         search_condition,
             in  unsigned long  how_many,
             out DataSeq        results,
             out DataIterator   iter);
};

似乎多余。 为什么你需要两者?

1 个答案:

答案 0 :(得分:1)

操作只能有一个返回值,但可以有多个输出参数。用户决定使用什么,但在很多情况下,操作返回一个值,然后用户更容易获得返回值,以便他可以编写例如(使用IDL到C ++ 11):

int32_t my_result = foo->my_operation ();

如果有一个out参数,他必须写

int32_t my_result {};
foo->my_operation (my_result);

第一个示例更简单,也更安全,无需将my_result显式初始化为默认值。