2013-11-09 3 views
2

정수 값을 포함하는 TInt 클래스를 C++에두고 몇 가지 메서드를 제공합니다. 또한 말을 C++로 나를 수 있도록 INT를 받아들이는 기본 생성자가 있습니다 싶습니다 C++ -> C# SWIG 사용 : 클래스의 기본 생성자 사용 방법

TInt X=3; 

이 꿀꺽 꿀꺽를 사용하여 C#이 다른 클래스를 수출하고 내가 무엇을 알아낼 수있는 게 아니에요 지금 내가 예상 오류가

는 것은 더는 "암시 적으로 '색조'에 'INT'을 변환 할 수 없습니다"얻고

TInt X=3; 

: C# 같은 라인에 쓸 수 있도록 할 필요가 TInt를 인수로 받아들이는 다른 클래스의 메소드가 있기 때문에 복잡합니다. 예를 들어, TIntV는 TInt의 벡터를 포함하는 클래스이며 Add (TInt & Val) 메서드를가집니다.

TIntV Arr; 
Arr.Add(new TInt(3)); 

어떤 도움을 크게 감상 할 수있다 : 는 C#에서 난 단지로이 메서드를 호출 할 수 있습니다.

그레고르

답변

4

: 꿀꺽 꿀꺽의 인터페이스 파일에서

는 (* .I) 나는 다음과 같은 라인을 추가했습니다 :

%typemap(cscode) TInt %{ 
    //this will be added to the generated wrapper for TInt class 
    public static implicit operator TInt(int d) 
    { 
     return new TInt(d); 
    } 
%} 

이렇게하면 생성 된 .cs 파일에 연산자가 추가됩니다. C++ 클래스를 가져 오는 코드 앞에 선언 된 인터페이스 파일에이 내용이 있어야한다는 사실을 염두에 두어야합니다.

3

할 수 있습니다 암시 적 사용자 정의 형식 변환 연산자를 선언 할 implicit 키워드.

Example : 나는 사이 후안 의해 답변을 포함하는 완벽한 솔루션을 발견했습니다

public class Test 
{ 
    public static void Main() 
    { 
     TInt X = 3; 
     Console.WriteLine(X); 
    } 
} 

class TInt 
{ 
    public TInt(int d) { _intvalue = d; } 
    public TInt() { } 

    int _intvalue; 

    public static implicit operator TInt(int d) 
    { 
     return new TInt(d); 
    } 
} 
+0

정보 주셔서 감사합니다. 나는 생성 된 .cs 파일에 그러한 수정을 할 수 있음을 알고 있지만 SWIG에게이 코드를 자동으로 포함하도록 지시하는 방법이 있습니까? 나는 C++ 코드를 수정할 때마다 생성 된 .cs 파일을 다시 편집하고 싶지 않습니다. –

+0

예, 그렇게 생각합니다. 암시적인 연산자를 부분 클래스에 넣고 SWIG에게 TInt의 부분 클래스를 생성하도록합니다. – sloth