1

我正在尝试在 C++ 中实现享元设计。这就是我到目前为止所拥有的。

std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>> mymap;
std::shared_ptr<Gdiplus::Pen> getPen(Gdiplus::Color const & color, float width )
{   
    std::pair<Gdiplus::Color,float> input;
    input = std::make_pair(color, width);
    std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>>::const_iterator got = mymap.find (input);

        if ( got == mymap.end() )
        {
            auto pen = std::make_shared<Gdiplus::Pen> ();
            pen->SetColor(color);
            pen->SetWidth(width);
            //std::pair<Gdiplus::Color,float> input2;
            mymap.insert(std::make_pair(input, pen));
            return pen;             
        }       
        else
        {
            if (std::shared_ptr<Gdiplus::Pen> m_pen = got->second.get())
               return m_Pen;
        }

}

我的问题在 else 语句中。我试图弄清楚两个指针是否相同,但我收到错误消息

cannot convert from 'Gdiplus::Pen *' to 'std::tr1::shared_ptr<_Ty>' 
4

1 回答 1

2

您在这一行中的问题行:

std::shared_ptr<Gdiplus::Pen> m_pen = got->second.get();

说明

std::shared_ptr<T>.get()shared_ptr返回由 a (ie, )存储的内部指针Grdiplus::Pen*。试试这个:

std::shared_ptr<Gdiplus::Pen> m_pen = got->second;

这将允许您分配 to ,因为从tom_pen没有隐式转换。T*std::shared_ptr<T>

于 2013-03-29T23:46:39.977 回答