C++/CX 一起使用abstract + Final 关键字

问题描述 投票:0回答:1

我正在开发一个 C++/CX 项目,刚刚遇到以下定义:

#pragma once

struct ColorHelper abstract final {
    static COLORREF Lighten(COLORREF color, int amount);
    static COLORREF Darken(COLORREF color, int amount);
    static bool IsSystemThemeDark();
};

我有点困惑。 abstract关键字告诉我,我不能实例化这个类,但是final关键字说我cannot从它派生,那么给出了什么?这应该像一个命名空间吗?或者也许是 C# 中的静态类之类的东西?

winapi visual-c++ c++-cx c++-winrt
1个回答
0
投票

abstract关键字告诉我,我无法实例化这个类,但final关键字告诉我,我无法从中派生,那么是什么?

是的。此类型唯一可用的操作是访问其

static
类成员。

这应该像命名空间吗?

是的,差不多。如果

ColorHelper
是一个 C++ 命名空间,那么就客户端而言,它将具有相同的接口。

那么,为什么它不是一个命名空间,而是一个定义有些晦涩的类型?

因为并不是所有的编程语言(比如C#)都支持调用自由函数。由于

ColorHelper
是一种 Windows 运行时类型,因此对其建模以支持跨语言互操作性的方式存在限制。具体来说,所有函数都需要在类型上实现,即使这意味着引入永远无法实例化的类型。

本质上,仅具有

abstract final
类成员的
static
类型在道德上相当于 C++ 命名空间,其表达方式使其可以跨所有受支持的 Windows 运行时语言进行访问。

© www.soinside.com 2019 - 2024. All rights reserved.