c++ - 为已知类型扩展 wxAny [wxWidgets]

标签 c++ wxwidgets

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

具体来说,我想使用 wxAny 来保存 int 之一, float , double , wxStringwxDateTime .只用 double 表示数字可能没问题并在别处进行转换。

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

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

这与对 wxFreeChart 库的一些更新有关,因此我希望只具有与标准 wxWidgets 库相同级别的依赖性。

最佳答案

让我们倒着读这个问题。

wxAny 方法不是 virtual ,这让我认为 wxAny 不打算被子类化”。的确。 C++ 不是纯粹的 OO 语言,事实上 OO 甚至不是默认语言。 virtual是 Liskov 可替换性的重要组成部分,但方法只有 virtual如果您明确制作它们。

“显而易见的事情是对 wxAny 进行子类化”。这在没有自由函数的纯 OO 语言中是显而易见的。在纯 OO 语言中,每个函数都属于一个类。并且由于您无法向 wxAny 添加函数,您将它们添加到子类。但如前所述,C++ 不仅仅是 OO,它还具有自由函数。 bool compare(wxAny,wxAny)是有效的函数声明。

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

关于c++ - 为已知类型扩展 wxAny [wxWidgets],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43888724/

相关文章:

wxwidgets - 如何从wxAuiManager中找到wxAuiToolBarItem?

c++ - wxWidgets - 如何嵌入 .ico 和 .png 图像并用于绘制工具栏项目

c++ - 等价于 C++ 中的 C strcpy

c++ - g++ 不能很好地与 wx-config 一起使用

c++ - 如何在列表框右键单击时创建上下文菜单?

c++ - 提供可配置的默认实例

python - 如何在 wxPython for windows 中的 saveFileDialog.SetFilename 中设置默认文件名?

c++ - 找不到 -lstdc++ 的 Xcode 4.4 10.6 sdk 库

c++拆分函数随机崩溃

c++ - 为什么编译器在某些情况下看不到模板类中的错误?