c++ /CLI:如何在本机类中存储托管引用
C++/CLI: how to store a managed reference inside a native class?
在我的混合解决方案(c++/. net)中,我想将Log4Net的ILog实例传递给c++对象(以统一解决方案中的日志记录)。
我想写一个c++接口(LogInterface),然后在c++/CLI项目中实现一个托管到非托管的适配器,但问题是非托管适配器将无法存储指向托管ILog实例的字段。
是否有一种优雅,安全和执行的方法来实现这一点(除了将托管引用存储在静态缓存中)?
class UnmanagedLogAdapter :
public LogInterface
{
public:
UnmanagedLogAdapter(log4net::ILog^ log);
virtual bool IsInfoEnabled(void) const override
{
return m_log->IsInfoEnabled();
}
virtual void Info(const std::wstring& message) override
{
log4net::ILog^ log = m_log; // alternative that I want to avoid: log = StaticCache::Find(m_logId);
log->Info(gcnew System::String(message.cstr()));
}
private:
log4net::ILog^ m_log; //TODO: a managed field is forbidden
};
使用gcroot<ILog^>
成员,如下所述。
相关文章:
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 存储对(可能)临时对象的引用是否合法,只要引用不比对象存活?
- 在C++中,如果成员引用在其声明中初始化,为什么需要存储空间?
- 我们如何在指针中存储对对象的引用?
- 如何在拥有的C++对象中安全地存储对所有者的引用?
- C++ 在节点内存储对数据对象的引用,而不复制数据
- 标准库容器结构是否存储副本或引用?
- 如果结果存储在变量中forward_as_tuple然后在 std::apply 中使用之前丢失右值引用
- 是否可以将引用存储在标准::任何中
- 在模板中存储右值引用的危险
- 通过引用传递对象并将其存储为成员变量
- 每当传递lvalue时,每当通过rvalue传递时,将const引用存储
- 按名称存储和引用变量列表
- 在类中存储引用
- 何时应存储指向函数的引用或指针?
- 在闭包中,如何通过存储在内存中的指针或引用类型捕获可变性或用现代函数式语言进行处理?
- c++存储引用返回的私有变量的正确方法
- 如何提升::变体存储引用
- 使用std::containers存储引用,gnuc++98
- 我如何设法在标准容器中存储引用类型?