微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将一个类的数据存储在另一个类中

如何解决将一个类的数据存储在另一个类中

我有一个fp 代表一个定点数。底层类型在编译时固定,小数点位置在运行时确定。 因此,我需要将小数点的位置 p 存储在某处。

其次,我想在具有定点数类 fp 类型变量的结构中使用我的定点数,包括它的数组(注意:我正在使用 Cuda,因此,我不能使用标准::向量)。由于将位置 p 存储在类 fp 中会产生很大的开销,因此我想将其存储在容器结构中。

例如类似于以下内容(显然无法编译)

template<int &p_> struct fp {
    int data;
    float get() { return data/(float)p_; }
    void set( float data_ ) { data = data_*p_; }
};
struct container {
        int p = 4;
        fp<p> s;
};

我觉得我的方法错误的,但我还没有找到其他解决方案(我也不知道如何为我的问题命名 --- 随意编辑它)。

解决方法

看起来 fpcontainer 的联系非常紧密。我会说得非常明确,并使 fp 成为 container 的嵌套类型。在 C++ 中,嵌套类型不会在实例之间创建特殊关系。 containerfp 实例之间的关系仍然是成员 fp container::s

但是您现在可以编写包含 containerfp::get() 访问器,将 fp::d 添加到 get 的参数列表中。

[编辑] 由于我们需要在多个课程中使用它,因此有时间来学习一下 CRTP。

template <typename CT>
class baseContainer 
{
protected:
   struct fp {
     int data;
     float get(int p_) const { return data/(float)p_; }
     void set( float data_,int p_ ) { data = data_*p_; }
  };
  float get(fp const& fp_) { return fp_.get((CT const*)(this)->p_); }
  void set( fp& fp_,float data_) { fp.set(data,(CT*)(this)->p_); }
}

现在 container 可以继承 baseContainer<container>。在 baseContainer<container> 中,(CT*)(this)->p_ 指的是 container::p_

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。