当已知 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 语言中是显而易见的。在纯 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/