У меня есть ЬурейиЙ в C++, который выглядит следующим образом:SWIG неизменен станд :: Карта ссылка
typedef std::map<int, TestClass> TestClassMap;
У меня есть еще один класс, который возвращает const TestClassMap&
.
Тогда в моем интерфейсе (.i) файл для SWIG, у меня есть следующие:
namespace std
{
%template(TestClassMap) map<int, myNamespace::TestClass>;
}
Это нормально компилируется и создает C# библиотеки.
Однако в библиотеке C# функция, возвращающая const TestClassMap&
, фактически возвращает TestClassMap, которая может быть изменена (изменена). Если я посмотрю на параметр IsReadOnly
на возвращаемом объекте, он будет ложным.
От взгляда на документацию SWIG, похоже, есть способ отметить объект как immutable
, который, я думаю, является тем, что я хочу. Тем не менее, я пытался сделать это и не имел никакого успеха. Я попробовал каждый из следующих:
%feature("immutable","1") TestClass;
%immutable TestClass;
%immutable
%template(TestClassMap) map<int, myNamespace::TestClass>;
%mutable
есть какая-то основная причина, почему const std::map<>&
не может быть неизменны? Любые другие идеи?