Windows运行时组件(C ++)中的继承

我们有一个几何库,用于定义应用程序中的所有几何对象。 使用可以在应用程序中手动创建几何对象,也可以从文件导入几何,例如CSV,KML,GPX等。

几何库最初是用C ++编写的。 例如,以下是几何图形库中CPoint类的示例。

然后,通过为其创建Windows运行时组件,开始在Windows项目中使用此几何图形库。 基本上,Windows运行时组件只是C ++编写的原始类的包装类的集合。 自然,我们想尽可能地保留C ++中的继承结构。

但是,Windows运行时组件没有很好的继承支持。 下面引用了Ref类和结构(C ++ / CX)

但是,Windows Runtime继承模型不打算用作常规继承模型; 在C ++ / CX中,这意味着用户定义的公共引用类不能用作基类。

但是,这是一个例外,它是Windows :: UI :: Xaml:DependencyObject 。 我们可以定义一个未密封的类,例如从DependencyObject继承的MyBase ,然后其他ref类可以从MyBase继承。

而这正是我们为Windows运行时组件工作继承的方式。 到目前为止,这似乎是唯一的方法。

最后,我们开始研究KML导入。 我们想让重要的后台运行,这很有意义,因为根据文件的大小,此操作可能会非常慢。 一切正常,直到我尝试创建几何对象并将其保存到数据库。 我注意到以下异常:

该应用程序调用了一个已编组为不同线程的接口。

我们所有的几何对象都源自DependencyObject ,这只能在UI线程中使用,这是一个事实。 奥尔兹