当属性的名称与返回的数据类型相同时,属性将被重命名
本文关键字:属性 重命名 数据类型 返回 | 更新日期: 2023-09-27 18:26:48
我面临以下问题:
我的接口是用C#定义的。我在接口中使用自定义枚举。有些枚举与返回的数据类型同名,例如:
Foo Foo { get; }
Bar Bar { get; }
我使用tlbexp来使用C++中的模块。将与其数据类型共享名称的属性从"重命名为";名称";至"_名称":
Bar myEnumValue=pFoo->条形码//不存在
Bar myEnumValue=pFoo->_酒吧//是我的"酒吧"-属性
到目前为止,我没有找到任何关于原因以及我是否/如何能够防止这种情况发生的文件。我在生成或导出过程中没有收到任何警告。。为了直观地使用我的模块,我不想重命名属性或枚举。
有人能解释一下为什么会发生这种事吗?
在C++中,这是不允许的:
class B {};
class A {
B B;
};
因为[basic.scope.class] 3.3.7/1
:
S类中使用的名称N在其上下文中以及在S的完整范围内重新评估时应指代相同的声明。违反此规则不需要进行诊断。
请注意,这只适用于类内部的声明,对于命名空间范围或函数范围,规则更复杂——有时允许B B;
,有时不允许。
更新:实际上这是完全有效的:
class B {};
class A {
::B B;
};
因此,您可以尝试让tlbexp
生成这样的代码。