我有一个基类,它包含一些数据结构,还有一些派生类包含完全相同的数据,但是赋予了一些额外的功能,比如(为了具体起见):
struct Derived : public std::vector<double>
{
// Constructors, define or inherit
using std::vector<double>::vector;
double norm() const;
}现在,在代码的另一部分中,我想在基本类型为norm()的对象obj上调用函数std::vector<double>。通常情况下,这是没有意义的,但这里:
Derived可以从它的基础构建(构造函数是用示例中的使用声明导入的),Derived和itss基具有完全相同的数据成员。我可以打电话:
Derived(obj).norm()但我想避免不必要的拷贝。
是否有一种方法可以简单、安全地重新解释具有相同底层数据结构的对象?或者是一种设计模式,使数据结构具有(相当大的)功能集,从而完全避免这个问题?
发布于 2016-10-04 18:26:06
发布于 2016-10-04 18:13:50
您可以重载该函数,仅此而已:
struct Derived : public std::vector<double> {
using std::vector<double>::vector;
inline double norm() const { return norm(*this); }
static double norm(const std::vector<double> &) const;
}现在您可以同时调用Derived::norm(obj)和derived.norm(),其中:
obj是std::vector<double>Derived是类derived是一个具有Derived类型的对象。如果您想把Derived当作它的基础,那么使用它的基础。
https://stackoverflow.com/questions/39857085
复制相似问题