首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有相同数据结构的C++类

具有相同数据结构的C++类
EN

Stack Overflow用户
提问于 2016-10-04 16:09:06
回答 2查看 404关注 0票数 1

我有一个基类,它包含一些数据结构,还有一些派生类包含完全相同的数据,但是赋予了一些额外的功能,比如(为了具体起见):

代码语言:javascript
复制
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基具有完全相同的数据成员。

我可以打电话:

代码语言:javascript
复制
    Derived(obj).norm()

但我想避免不必要的拷贝。

是否有一种方法可以简单、安全地重新解释具有相同底层数据结构的对象?或者是一种设计模式,使数据结构具有(相当大的)功能集,从而完全避免这个问题?

EN

回答 2

Stack Overflow用户

发布于 2016-10-04 18:26:06

惯用的方法是提供免费函数而不是成员函数:

代码语言:javascript
复制
double norm(const std::vector<double>& v)
{
    // ...
}

这完全避免了这个问题。

(请, )

票数 3
EN

Stack Overflow用户

发布于 2016-10-04 18:13:50

您可以重载该函数,仅此而已:

代码语言:javascript
复制
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(),其中:

  • objstd::vector<double>
  • Derived是类
  • derived是一个具有Derived类型的对象。

如果您想把Derived当作它的基础,那么使用它的基础。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39857085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档