我在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: