CORBA:有没有一种方法可以为IDL中的操作参数指定默认值



我有一个简单的CORBA接口,它有一个如IDL摘录所示的简单操作:

interface MtInterface
{
    void myOperation(in string id);
}

我需要在myOperation中添加一个布尔参数。所以我所做的就是将IDL更改为:

interface MtInterface
{
    void myOperation(in string id, in boolean flag);
}

现在一切都很好,除了这个接口在很多地方都使用,我想通过给flag一个默认值false来避免修改所有调用,所以我的第一次尝试看起来像:

interface MtInterface
{
    void myOperation(in string id, in boolean flag = false);
}

但这使得omniORB用CCD_ 3吠叫。

因此,重复标题中的问题:有没有一种方法可以在我的IDL中为操作参数指定默认值?在这种特殊情况下,如何为flag指定默认值false

谢谢你的帮助!

否。IDL不支持默认参数,可能是因为某些目标语言不支持该特性。

对您有用的是union作为您的参数。一个变体有两个参数,一个只有一个。不过,您仍然需要手动编码默认值,例如,让单参数版本调用双参数版本,将第二个参数设置为您想要的默认值。使用此IDL:

interface MtInterface
{
   struct myShortArg
   {
      string    id;
   };
   struct myLongArg
   {
      string    id;
      boolean   flag;
   }
   union myArgument switch (unsigned short)
   {
      case 1: myShortArg   shortArg;
      case 2: myLongArg    longArg;
   }
   void myOperation(in myArgument);
}

在实现中,您需要检查并集的实际内容(细节将取决于语言绑定)。你可以沿着以下路线来做:

switch(typeof(myArgument))
{
    case class(myLongArg):    myOperationImpl(myArgument.id, myArgument.flag);
                              break;
    case class(myShortArg):   myOperationImpl(myArgument.id, false);
                              break;
}

相关内容

  • 没有找到相关文章

最新更新