gpt4 book ai didi

c++ - 在 C++ 中重写 typedef

转载 作者:行者123 更新时间:2023-12-03 08:41:56 24 4
gpt4 key购买 nike

我有一个通用结构

template<typename X, typename Y>
struct S
{

};

然后有一个抽象类,它在纯虚函数中返回指向上述结构的共享指针。其中一个派生类也实现了这个功能,但需要返回指向不同实例化类型的 S 的指针:

typedef boost::shared_pointer<S<double, double>> BPtr;
class BaseClass
{
public:
BPtr Func() = 0;
};

typedef boost::shared_pointer<S<double, std::tuple<double, double>>> Dptr;
class DerivedClass : public BaseClass
{
public:
DPtr Func() {}
}

理想情况下,我希望能够在派生类中返回覆盖 typedef,但不能在 C++ 中这样做。

我该如何解决这个困境?

最佳答案

首先,智能指针:它们没有共同的基类(正如 vector<baseclass> 不是 vector<derived> 的基类),因此协变返回类型不起作用。

其次,即使您将智能指针替换为原始指针,类模板的不同实例也不共享公共(public)基础(如 vector 和智能指针),因此您很不走运。

请注意,类模板的不同实例实际上可以相互派生,所以如果 S<double,double>S<double,tuple<double,double>> 的基类,您可以使用协变返回,但这似乎是一种不稳定的方法。

总之,我认为您应该描述一下为什么您认为 S<T,tuple<T,T>>可以被视为 S<T,T> ,这似乎是您代码中的基本假设。

关于c++ - 在 C++ 中重写 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37310279/

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