为已知类型扩展 wxAny [wxWidgets]
Extending wxAny for known types [wxWidgets]
当已知wxAny只包含其中一种类型时,是否可以在应用程序中为有限的类型集扩展wxAny的功能?
具体来说,我想使用 wxAny 来持有 int
、 float
、double
、wxString
或 wxDateTime
中的一个。仅用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
。
- 什么是事件表 (wxWidgets)?
- 无法编译wxWidgets Hello World
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 内存所有位置 wxWidgets
- С++ wxWidgets:代码架构,设计原则和模式
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- 从 wxWidgets 中的.DLL加载图标
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- C++ wxWidgets:在创建小部件后设置字体
- C++ wxWidgets:更改大小器的字体
- meson-build:wxWidgets 资源文件,用于 Windows 未构建
- Visual Studio中的wxwidgets应用程序给出错误"LNK2019 unresolved external symbol"
- 如何在 wxWidgets 中使用 SetTabBehavior 进行C++?
- 在 wxWidgets 中的 wxTextCtrl 上手动触发 ENTER 键按下事件C++?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- wxWidgets 3.1.3 图标在 mac 下加载 - ICNS 文件不可读?
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 使用标准窗口与wxWidgets一起绘制?
- 为已知类型扩展 wxAny [wxWidgets]