gpt4 book ai didi

c++ - 对两个构造函数使用 'this' 指针

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:43 26 4
gpt4 key购买 nike

考虑这个类的实现:

template <class Impl>
class LSQ {
public:
LSQ(O3CPU *cpu_ptr, IEW *iew_ptr);
IEW *iewStage;
class DcachePort : public Port
{
protected:
/** Pointer to LSQ. */
LSQ *lsq;
public:
DcachePort(LSQ *_lsq)
: Port(_lsq->name() + "-dport", _lsq->cpu), lsq(_lsq)
{ }
};
...
};

// default code
template <class Impl>
LSQ<Impl>::LSQ(O3CPU *cpu_ptr, IEW *iew_ptr)
: cpu(cpu_ptr), iewStage(iew_ptr), dcachePort(this),
{
...
}

// default code
template<class Impl>
std::string
LSQ<Impl>::name() const
{
return iewStage->name() + ".lsq";
}

所以 DcachePort() 接受“this”,这实际上是

 LSQ(O3CPU *cpu_ptr, IEW *iew_ptr);

现在我添加了自己的构造函数:

 template <class Impl>
class LSQ {
public:
LSQ(O3CPU *cpu_ptr, IEW *iew_ptr); // default code
LSQ(O3CPU *cpu_ptr, Fetch *f_ptr); // added by me
IEW *iewStage;
Fetch *fetchStage;
class DcachePort : public Port
{
protected:
/** Pointer to LSQ. */
LSQ *lsq;
public:
DcachePort(LSQ *_lsq) // default code
: Port(_lsq->name() + "-dport", _lsq->cpu), lsq(_lsq)
{ }
};
...
};


// added by me
template <class Impl>
LSQ<Impl>::LSQ(O3CPU *cpu_ptr, Fetch *f_ptr) // added by me
: cpu(cpu_ptr), fetchStage(f_ptr), dcachePort(this)
{
}

问题是,我的构造函数中的“this”是

  LSQ(O3CPU *cpu_ptr, Fetch *f_ptr)

当它进入 DcachePort(this) 然后 name() 时,它会尝试执行

  return iewStage->name() + ".lsq"; 

但是在我的构造函数中,iewStage 没有被初始化。而是使用 fetchStage

我该如何解决?

最佳答案

DcachePort 依赖于 iewStage,因此如果您要继续使用现有的 DcachePort 构造函数实现,则必须传入 iewStage 作为第三个构造函数参数。

(或编辑现有构造函数以将 fetchStage 作为第三个参数传入。)

或者,重写 LSQ::name(),使其使用来自 fetchStage 而不是 iewStage 的信息。 (如果不能,那么您仍然必须将 iewStage 作为构造函数参数传入`)


最后一个建议:如果你能通过 "is-a"测试,你可以继承 LSQ,做这样的事情(不确定我是否有正确的模板语法):

template <class Impl>
class MyLSQ : public LSQ<Impl>
{
Fetch *fetchStage;
MyLSQ(O3CPU *cpu_ptr, IEW *iew_ptr, Fetch *f_ptr);
}


template <class Impl>
MyLSQ<Impl>::MyLSQ(O3CPU *cpu_ptr, IEW *iew_ptr, Fetch *f_ptr)
: LSQ(cpu_ptr, iew_ptr), fetchStage(f_ptr)
{
}

为了通过“is-a”测试,MyLSQ 的任何实例都必须能够像 LSQ 一样用于任何 LSQ 的方法(包括构造函数),但您可以添加额外的状态/行为,并覆盖LSQ 的任何虚拟方法。

关于c++ - 对两个构造函数使用 'this' 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8659639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com