假設我有一個NativeClassInstance以下簡單的包裝。傳遞天然型的C++/CLI包裝到另一C++/CLI組件
public ref class Wrapper
{
private:
NativeClass *_wrapped;
public:
Renderer()
{
_wrapped = new NativeClass();
}
~Renderer()
{
delete _wrapped;
}
operator NativeClass*()
{
return _wrapped;
}
}
現在,我想與Wrapper wrapper = new Wrapper()
創建C#包裝的實例,並在另一個駐留在另一組件,Helper.Foo(wrapper)
(沒什麼好奇怪的具有其它功能不直接相關的包裝了本地功能的包裝用它在另一個組件類,IMO):
// Utilities is in another Assembly
public ref class Helper
{
public:
static Foo(Wrapper ^wrapper)
{
// Do something in native code with wrapper->_wrapped
}
}
與隱式用戶轉換的結果是:
- 候選人功能(S)不能訪問
如果我讓_wrapped公衆是:
- 不能訪問類中聲明私有成員...
現在,我已經據悉,原生型能見度private大會之外。那麼,我應該如何在它定義的程序集之外的本機代碼中使用包裝的實體呢?我讀過的make_public但如此看來在一般情況下非常有限,你不能用模板類型使用。我錯過了什麼嗎?有更正確的解決方案嗎?
大聲笑,我已經看到你的答案!我想有一次我應該接受這個限制及其解決方法。 – ceztko 2011-05-25 04:54:40
其實,這是個不錯的解決辦法。本地wrappER類型(對本機wrappED類型)的顯式轉換運算符也可能有助於可用性。 – ceztko 2011-07-09 03:49:41
在msdn網站上引用該解決方案。 「所以創建一個本地類VectorOfNativeB,並在其中存儲一個指向/ std :: vector的指針/ ref。將這個類放入B中,並使用make_public附註將其公諸於衆。更改GetMgdClassB方法以獲取指向此本機類的指針/引用「,Mike Danes(Microsoft社區貢獻者,主持人)。 –
ceztko
2011-07-09 03:53:24