gpt4 book ai didi

c++ - 模板类的继承问题

转载 作者:太空狗 更新时间:2023-10-29 23:10:22 27 4
gpt4 key购买 nike

我在编写的某些代码中遇到了一个非常奇怪的错误。 代码背后的基本思想可以在以下示例中简单化:


template <class f, class g> class Ptr;<p></p>

<p>template <class a, class b, class c = Ptr<a,b> >
class Base
{
public:
Base(){};
};</p>

<p>template <class d, class e>
class Derived : public Base <d,e>
{
public:
Derived(){};
};</p>

<p>template <class f, class g>
class Ptr
{
public:
Ptr(){};
Ptr(Base<f,g,Ptr<f,g> >* a){};
};</p>

<p>typedef Derived<double,double> DDerived;</p>

<p>int main()
{
Base<int,int> b = Base<int,int>();
Derived<double,double> d = Derived<double,double>();
DDerived dd = DDerived();
Ptr<double,double> p(&dd);
return 1;
}
</p>

基本思想是指针被 Ptr 类取代(这最终将在 MPI 设置中使用,因此标准指针实际上是无用的)。指针被设计为“指向”基类,因此可以指向任何继承的类(如示例中所示)。

谁能想到这可能在非平凡情况下起作用的任何原因(但对象架构保持相同的情况)。

主要情况下出现的错误如下:


void function()
{
vector nVector(1); // cut down for simplicity
nVector[0].SetId(1); // To ensure the node is instantiated correctly
Ptr temp(&nVector[1]);
};

此代码在使用 MPICXX:
编译时会产生(稍微扩展的版本)错误 没有用于调用 Ptr ::Ptr(Derived *)
的匹配函数 候选人是。 . . (为简单起见删除了一些)
Ptr ::Ptr(Base >*) [f = double, g = double]

干杯,埃德

已编辑(更好地详细说明错误,添加了有关编译器的信息)

最佳答案

不幸的是,我有点笨,忘记将我的 Ptr 类放在与基类和派生类相同的命名空间中。

我想,这就是它不起作用的原因! =]

关于c++ - 模板类的继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/586009/

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