Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cli c+中的观察者模式+/用于混合托管/非托管的cli 我有一个系统,包括C语言UI、C++ +CLI混合模式互操作包装器和一些本地C++项目。 我需要做的是建立一个系统,使原生C++代码可以发送日志消息,UI可以报告它。_C++ Cli_Observer Pattern_Mixed Mode - Fatal编程技术网

C++ cli c+中的观察者模式+/用于混合托管/非托管的cli 我有一个系统,包括C语言UI、C++ +CLI混合模式互操作包装器和一些本地C++项目。 我需要做的是建立一个系统,使原生C++代码可以发送日志消息,UI可以报告它。

C++ 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(

我设置了一个本地IObservable作为模板,但是C代码不能作为观察者。我的想法是在C++/CLI中建立另一个观察者模式,观察本机观察者,并让C#实现它。我将其用作模板,但我正在努力将其转换为有效的C++/CLI

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);
}

谢谢,这些都是有用的链接-但是当我删除空检查时,我得到了相同的错误。