我有一个简单的CORBA接口,操作简单,如本IDL提取所示:
interface MtInterface
{
void myOperation(in string id);
}
我需要在myOperation中添加一个布尔参数。所以我所做的就是将我的IDL改为:
interface MtInterface
{
void myOperation(in string id, in boolean flag);
}
现在这一切都很好,除了这个界面在很多地方使用,我想通过给{{1}的默认值false
来避免修改所有的调用。所以我的第一次尝试看起来像:
flag
但这会使omniORB与interface MtInterface
{
void myOperation(in string id, in boolean flag = false);
}
一起吠叫。
所以重复标题中的问题:是否有办法在我的IDL中为操作参数指定默认值?在这种特殊情况下,我如何为Syntax error in operation parameters
指定默认值false
?
感谢您的帮助!
答案 0 :(得分:3)
没有。 IDL不支持默认参数,可能是因为某些目标语言不支持该功能。
答案 1 :(得分:0)
对你有用的是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);
}
在您的实现中,您需要检查union的实际内容是什么(详细信息将取决于语言绑定)。您可以按照以下方式进行:
switch(typeof(myArgument))
{
case class(myLongArg): myOperationImpl(myArgument.id, myArgument.flag);
break;
case class(myShortArg): myOperationImpl(myArgument.id, false);
break;
}