C++ cli c+中的观察者模式+/用于混合托管/非托管的cli 我有一个系统,包括C语言UI、C++ +CLI混合模式互操作包装器和一些本地C++项目。 我需要做的是建立一个系统,使原生C++代码可以发送日志消息,UI可以报告它。
我设置了一个本地IObservable作为模板,但是C代码不能作为观察者。我的想法是在C++/CLI中建立另一个观察者模式,观察本机观察者,并让C#实现它。我将其用作模板,但我正在努力将其转换为有效的C++/CLIC++ cli c+中的观察者模式+/用于混合托管/非托管的cli 我有一个系统,包括C语言UI、C++ +CLI混合模式互操作包装器和一些本地C++项目。 我需要做的是建立一个系统,使原生C++代码可以发送日志消息,UI可以报告它。,c++-cli,observer-pattern,mixed-mode,C++ Cli,Observer Pattern,Mixed Mode,我设置了一个本地IObservable作为模板,但是C代码不能作为观察者。我的想法是在C++/CLI中建立另一个观察者模式,观察本机观察者,并让C#实现它。我将其用作模板,但我正在努力将其转换为有效的C++/CLI ref class Observable { public: Observable(void); virtual ~Observable(void); event System::EventHandler^ SomethingHappened; void DoSomething(
ref class Observable
{
public:
Observable(void);
virtual ~Observable(void);
event System::EventHandler^ SomethingHappened;
void DoSomething() {
System::EventHandler^ handler = SomethingHappened;
//if (handler != nullptr)
//{
handler(this, System::EventArgs::Empty);
//}//null check not permitted in C++/CLI
};
给出错误:C3918:要求某个数据成员碰巧是。-但我不能确定我做错了什么
有什么建议吗
谢谢,
Melanie在C++/Cli中,当使用“普通事件”时,不需要检查事件是否为null(而且不能)。语言为你解决了这个问题 见相关文件: 因此,对于您的情况,只需删除试图使用C#语法的
nullptr
check。事件在C++/CLI中的工作方式稍有不同,除了添加和删除访问器之外,它们还具有一个。换句话说,触发事件的方法。如果不提供显式版本,编译器将自动生成一个。这使得举办活动变得非常简单:
void DoSomething() {
SomethingHappened(this, System::EventArgs::Empty);
}
使用,正确的做法是直接触发事件。像这样:
void DoSomething() {
SomethingHappened(this, System::EventArgs::Empty);
}
谢谢,这些都是有用的链接-但是当我删除空检查时,我得到了相同的错误。