2017-05-31 5 views
0

私が...ここに例があり、「デフォルト」生成されたラッパーの周りに私自身のラッパーを使用するようにSWIGを強制しよう カスタムラッパーが

I以下の「インターフェース」のコードがあります。

template<typename T> 
class Expected 
{ 
public: 
    T Value(); 
}; 

%template(Expected_Int) Expected<int>; 
%template(Expected_Bool) Expected<bool>; 
%template(Expected_Void) Expected<void>; 

そして、私自身のC#実装(私自身のラッパー)他のクラスで

public class Expected 
{ 
    public Expected(Expected_Void private) {...} 
} 

は、私はこのように、期待収益値を使用し、「期待setHandle(IViewHandle *ハンドル)」とSWIGはこのコードを生成します:

public override Expected_Void setHandle(IViewHandle handle) { 
    Expected_Void ret = new Expected_Void(luciadsdkPINVOKE.ViewContext_setHandle(swigCPtr, IViewHandle.getCPtr(handle)), true); 
    if (luciadsdkPINVOKE.SWIGPendingException.Pending) throw luciadsdkPINVOKE.SWIGPendingException.Retrieve(); 
    return ret; 
    } 

さて、私は

public override Expected setHandle(IViewHandle handle) { 
    Expected_Void ret = new Expected_Void(luciadsdkPINVOKE.ViewContext_setHandle(swigCPtr, IViewHandle.getCPtr(handle)), true); 
    if (luciadsdkPINVOKE.SWIGPendingException.Pending) throw luciadsdkPINVOKE.SWIGPendingException.Retrieve(); 
    return Expected(ret); 
} 

(SWIGラッパーの周りに自分のラッパーを持っている)は、次のC#コードを生成したいが、それは可能ですか?

おかげ

%typemap(csout,excode=SWIGEXCODE) Expected<void> { 
    IExpected ret = new IExpected($imcall, true);$excode 
    return ret; 
} 
%typemap(cstype) Expected<void> "IExpected" 

答えて

1

あなたはそれを投稿しませんでしたが、私はあなたのC++メソッドのsetHandleを推測のようなものに見えるSOLUTION:あなたの場合だけ、

Expected<void> setHandle(IViewHandle); 

ので、このメソッドに対してのみ戻り値の型を変更したい場合は、%typemap(csout)を設定することができます。これは次のようなビットです:

%typemap(csout) Expected<void> MyClass::setHandle %{ 
    Expected_void ret = $imcall;$excode 
    return Expected(ret); 
%} 

これはうまくいくと思います。たぶん私は何かを忘れたが、arround thisを見て、おそらくより多くの情報を見つけるだろう。

希望します。

EDIT:

が実際に動作しません

、これは私が何を意味するのかである:

%typemap(csout) Expected<void> MyClass::setHandle %{ 
    Expected ret = new Expected($imcall);$excode 
    return ret; 
%} 
+0

おかげで、 私はポストに私の解決策を追加します。あなたはそれほど私の解決策ではありません;-) – CDZ

+0

あなたの解決策を見ています。この問題を修正するだけでIExpectedを作成しなかった場合は、明らかに最適です。 とにかく、私は私の答えに間違いを感じました。 –

+0

別のヒントは、このtypemapが期待して返すすべてのメソッドに対して機能することに気をつけてください。 1つのメソッドに集中するには、メソッド名を指定する必要があります。 –

関連する問題