Я сталкиваюсь со следующей проблемой:
Мои интерфейсы определены в C #. Я использую пользовательские перечисления в моих интерфейсах. Некоторые перечисления имеют то же имя, что и возвращаемый тип данных, например:
Foo Foo { get; }
Bar Bar { get; }
Я использую tlbexp, чтобы использовать модуль в C ++.
Свойства, которые имеют свое имя и тип данных, переименовываются из «Имя» в «_Name»:
Bar myEnumValue = pFoo-> Bar // не существует
Bar myEnumValue = pFoo -> _ Bar // это мое свойство ‘Bar’
До сих пор я не нашел никакой документации о причине и если / как я могу предотвратить это.
Я не получаю никаких предупреждений во время сборки или экспорта ..
Чтобы сделать использование моего модуля интуитивно понятным, я не хочу переименовывать свойство или перечисление.
Может кто-нибудь объяснить мне, почему это происходит?
В C ++ это не разрешено:
class B {};
class A {
B B;
};
потому что [basic.scope.class] 3.3.7/1
:
Имя N, используемое в классе S, должно относиться к тому же объявлению в его контексте и при повторной оценке в завершенной области действия S. Для нарушения этого правила не требуется никакой диагностики.
Обратите внимание, что это относится только к объявлениям внутри класса, для области имен или области функций правила более сложны — иногда B B;
разрешено, иногда нет.
Обновитьна самом деле это совершенно верно:
class B {};
class A {
::B B;
};
Таким образом, вы можете попытаться сделать tlbexp
генерировать код, как это.