为已知类型扩展 wxAny [wxWidgets]

Extending wxAny for known types [wxWidgets]

本文关键字:wxWidgets wxAny 扩展 类型      更新时间:2023-10-16

当已知wxAny只包含其中一种类型时,是否可以在应用程序中为有限的类型集扩展wxAny的功能?

具体来说,我想使用 wxAny 来持有 intfloatdoublewxStringwxDateTime 中的一个。仅用double表示数字并在其他地方进行转换可能是可以的。

我唯一需要实现的函数是 operator<operator==operator>,这两个参数都作为 wxAny 进行排序和查找最大值/最小值。

显而易见的是将子类wxAny wxSome并使用wxAny::CheckType为不同类型的分支不同的比较方法。我犹豫这样做的原因是因为wxAny方法不是虚拟的,这导致我认为wxAny不打算被子类化。

这与对 wxFreeChart 库的一些更新有关,因此我只想拥有与标准 wxWidgets 库相同级别的依赖项。

让我们倒过来读这个问题。

"wxAny方法不是virtual,这让我认为wxAny不打算被子类化"。事实上。C++ 不是一种纯粹的 OO 语言,事实上 OO 甚至不是默认语言。 virtual是 Liskov 可替代性的重要组成部分,但方法只有在您明确制作时才virtual

"显而易见的是wxAny子类"。这在没有自由函数的纯OO语言中是显而易见的。在纯面向对象语言中,每个函数都属于一个类。由于你不能向wxAny添加函数,所以你可以将它们添加到子类中。但如前所述,C++不仅仅是 OO,它还具有免费功能。 bool compare(wxAny,wxAny) 是一个有效的函数声明。

也就是说,I would like to hold one of ...建议你使用wxAny作为实现细节。也许你应该有一个包装类,它有一个wxAny成员。在这种情况下,您可以将比较器命名为 bool Wrapper::operator<(Wrapper rhs) const