2013-11-09 61 views
2

我在C++中有一個TInt類,它包含一個整數值並提供一些方法。它也有一個接受INT一個默認的構造,讓我在C++中說:C++ - >使用SWIG的C#:如何使用默認構造函數的類

TInt X=3; 

我想使用痛飲這和其他類導出到C#,我不能夠弄清楚什麼做我需要做的,能寫在C#中的同一行:

TInt X=3; 

現在,我得到一個預期的錯誤「無法隱式轉換‘詮釋’到‘色彩’」

的東西是更因爲在其他類中也有接受TInt作爲參數的方法。例如,TIntV是一個包含TInt矢量的類,並且有一個方法Add(TInt & Val)。 在C#中,我只能調用此方法爲:

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

任何幫助將不勝感激。

格里

回答

4

我發現,包括由西環的答案一個完整的解決方案:

在痛飲的接口文件(*。我)我已經添加了以下幾行:

%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