gpt4 book ai didi

c++ - 创建一个返回指向类模板对象的共享指针的函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:59:45 24 4
gpt4 key购买 nike

我想创建一个返回模板类对象的共享指针的函数:

#include <memory>

template <class T>
class Rectangular
{
public:

virtual T& getHight() = 0;
virtual T& getWidth() = 0;
virtual Rectangular<std::shared_ptr<T>>* getPtr() = 0;



};

template <class T>
class Square:public Rectangular<T>
{
public:
Square() {};
Square(T hight, T width) :m_hight(hight), m_width(width) {};
T& getHight() ;
T& getWidth() ;
Square<std::shared_ptr<T>>* getPtr() ;

public:
T m_hight;
T m_width;

};

template <class T>
T& Square<T>::getHight() { return m_hight; };

template <class T>
T& Square<T>::getWidth() { return m_width; };

template <class T>
Square<std::shared_ptr<T>>* Square<T>::getPtr() { return this; };


int main()
{

Square <double> sq(5,3);

std::cout << sq.getPtr()->getHight();

return 0;

}

这是我得到的运行时错误:
递归类型或函数依赖上下文太复杂。

谁能帮我看看发生了什么事?

最佳答案

您无法凭空变出共享所有权。 Rectangular::getPtr不会工作。没有 shared_ptrsq得到,它唯一属于main .

您似乎也对如何组合模板感到困惑。 Square<std::shared_ptr<T>>是一个正方形,其宽度和高度为 std::shared_ptr<T> s,大概指向不相关的数据。你可能的意思是std::shared_ptr<Square<T>> ,这是一个对象,代表一个正方形的所有权份额。

最后,虽然在数学上可能所有正方形都是矩形,但您不能将可修改正方形与可修改矩形互换使用。根据定义,正方形的宽度和高度是相等的。改变矩形的宽度不应改变它的高度。

这两个要求存在矛盾。

关于c++ - 创建一个返回指向类模板对象的共享指针的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54868143/

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