Не могу сделать C# обертку для enum C++ c помощью SWIG. Значение членов c++ enum, которые я хочу обернуть превосходят максимальное значение для Int32. В C# тип членов enum по умолчанию - Int32, поэтому в public enum BigNumbers { big = 0x80000000,...} я получаю ошибку компиляции cannot implicitly convert type 'uint' to 'int'. Несмотря на то, что я как мне кажется следую, инструкции,
в которой описывается данная ситуация, я не могу решить проблему. Видимо, я не понимаю чего-то базового.
Привожу код:
Заголовочный файл с enum, который нужно обернуть.
MyClass.h
class MyClass
{
public:
MyClass() {}
~MyClass() {}
enum BigNumbers
{
big = 0x80000000, bigger
};
};
Интерфейсный файл SWIG:
MyClass.i
%module cpp
%{
#include "MyClass.h"
%}
%include "MyClass.h"
%typemap(csbase) BigNumbers "uint"
%inline %{
enum BigNumbers { big=0x80000000, bigger };
%}
В результате я имею следующую конструкцию в автоматически созданном файле MyClass.cs, которая вызывает ошибку компиляции.
MyClass.cs
public enum BigNumbers {
big = 0x80000000,
bigger
}
и глобальный "правильный "enum c членами uint в отдельном файле:
BigNumbers.cs
public enum BigNumbers : uint {
big = 0x80000000,
bigger
}
хотя я ожидал увидеть его в качестве члена MyClass.
Специалисты по SWIG, отзовитесь!
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости