如何从CORBA方法返回nullpointers?

时间:2014-10-31 12:32:22

标签: return-value null-pointer ace-tao

假设我有一段简单的代码:

if(!hardware.produceMeSomeData())
  somehowHandleFailure();

现在我想让我的硬件运行在一台单独的计算机上,我想用CORBA远程通信。因此,两侧的CORBA层看起来与此类似:

HardwareData* HardwareClient::produceMeSomeData()
{
  IDL::HardwareData_var hwDataIdl;
  _hardwareRef->produceMeSomeData(hwDataIdl.out());

  HardwareData* hwData = nullptr;
  // here I'd like to do sth like this:
  if(!CORBA::is_nil(hwDataIdl))
    HardwareDataFromIdl(hwDataIdl.in(), hwData);
  return hwData;
}

HardwareServant::produceMeSomeData(IDL::HardwareData_out hwDataOut)
{
  HardwareData* hwData = _hardware->produceMeSomeData();
  if(hwData)
    HardwareDataToIdl(hwData, hwDataOut.ptr());
  else
    // ???
}

问题是,CORBA似乎不允许以任何方式返回nullpointers。如果我直接将nullptr分配给_out类型,则调用将抛出一个BAD_PARAM异常,如文档中所述,如果我没有为其分配任何内容,则相同。 所以它基本上迫使我创建一个对象,因此我很难设计出我需要的逻辑。具体而言,我必须滥用有效的对象来表示nullpointer,这样我才能在客户端区分这两个结果。 我的另一个想法是将返回类型包装到一个带有布尔值的结构中,该布尔值告诉我该对象是否有效。

我现在正在使用的快速黑客只是在客户端捕获BAD_PARAM异常并在这种情况下返回nullptr,但这看起来不像是好的和稳定的设计。

对此有更好更简单的解决方案吗?

0 个答案:

没有答案