2015-01-26 5 views
1

나는 다음과 같은 C의 형식 정의를 ++ 있습니다.꿀꺽 꿀꺽 불변의 표준 : :지도 참조

namespace std 
{ 
    %template(TestClassMap) map<int, myNamespace::TestClass>; 
} 

이 잘 컴파일은 C# 라이브러리를 작성 :

그런 다음 내 인터페이스 (.I) 꿀꺽 꿀꺽위한 파일에, 나는 다음 있습니다.

그러나 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<>&이 불변 할 수없는 이유를 몇 가지 근본적인 이유가 있습니까 : 나는 다음의 각 시도했습니다? 다른 아이디어?

답변

1

SWIG는 const-correctness를 보존하지 않습니다. 문서에 this rant를 참조하십시오

을이 명확하게 C++ 타입 시스템의 위반이지만, 문제를 해결하는 것은 필요한 것입니다 추가 구현의 복잡성이 꿀꺽 꿀꺽에서이를 지원하는 가치가 될 것 같지 않습니다 런타임 유형 시스템. 다음 릴리스에서이를 변경할 계획은 없습니다 (우리가 완전히 배제하지는 않겠지 만).

결론은이 특정 문제가 대부분의 SWIG 프로젝트에서 문제가되지 않는다는 것입니다. 물론 프로젝트를 유지 관리하는 것이 프로젝트의 가장 중요한 부분이라면 다른 도구를 사용해보십시오.