【发布时间】:2013-07-11 06:28:58
【问题描述】:
假设我有这样的类结构:基类Object,它是Bool、Int、Float、Bytes 和Unicode 类的父类。在我将Bool cast_bool() const、Int cast_int() const 等一些函数作为Object 类和所有子类中的虚函数之前,我已经分别实现了这些函数。
似乎更好的解决方案是实现template <typename TYPE> TYPE cast() const 函数。但是,由于 C++ 禁止虚拟模板功能,我不知道如何才能完成这项任务。我需要为Object 及其子代提供template <typename TYPE> TYPE cast() const。通用Object::cast<TYPE>() const 只会抛出CastError;然后对于Bool、Int 等每种类型,我将实现Bool::cast<Bool>() const、Int::cast<Bool>() const 等功能。我什至计划将强制转换添加到内置对象,尽管现在我只是重载@987654339 @、operator signed short() const等。如果没有实现,模板必须从Object类切换到它的通用形式,只是抛出一个错误。有没有办法做到这一点(也许我需要使用一些模式)?或者留下Int cast_int() const之类的功能更容易?提前致谢!
【问题讨论】:
-
如果您的数据转换存储在基类中,则没有理由不能将模板化成员函数添加到同一个基类中。然后让子类调用它。或者我可能误解了这个问题。
标签: c++ function templates virtual-functions