我在C++中有一个typedef,如下所示:

typedef std::map<int, TestClass> TestClassMap;

我还有另一个返回const TestClassMap&的类。

然后,在用于SWIG的界面(.i)文件中,我具有以下内容:
namespace std
{
    %template(TestClassMap) map<int, myNamespace::TestClass>;
}

这样可以很好地编译并创建C#库。

但是,在C#库中,返回const TestClassMap&的函数实际上返回一个可以更改(可变)的TestClassMap。如果我查看返回对象上的IsReadOnly设置,则为false。

通过查看SWIG文档,似乎可以找到一种将对象标记为immutable的方法,我认为这是我想要的。但是,我尝试执行此操作,但未成功。我已经尝试了以下每个方法:
%feature("immutable","1") TestClass;

%immutable TestClass;

%immutable
%template(TestClassMap) map<int, myNamespace::TestClass>;
%mutable

不能将const std::map<>&设为不可变有一些根本原因吗?还有其他想法吗?

最佳答案

SWIG不会尝试保留const正确性。请参考文档中的this rant:

09-26 04:18