Предположим, у меня есть следующая простая оболочка NativeClassInstance.
public ref class Wrapper
{
private:
NativeClass *_wrapped;
public:
Renderer()
{
_wrapped = new NativeClass();
}
~Renderer()
{
delete _wrapped;
}
operator NativeClass*()
{
return _wrapped;
}
}
Теперь я хочу создать экземпляр Wrapper из C # с Wrapper wrapper = new Wrapper()
и использовать его в другой оболочке встроенных функций, которая находится в другая сборка с 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
}
}
Результаты с неявным преобразованием пользователя:
- функции-кандидаты недоступны
Если я сделаю _wrapped общедоступным, это:
- не сможет получить доступ к закрытому члену, объявленному в классе...
Теперь я узнал, что видимость нативного типа private вне сборки.Итак, как я должен использовать обернутую сущность в собственном коде вне сборки, которую он определил?Я читал о make_public , но вы не можете использовать с типами шаблонов, поэтому в общем случае это кажется очень ограничивающим.Я что-то пропустил?Есть ли более правильное решение?