2012-12-14 186 views
0

我正在存储一个std::mapstd::shared_ptr<V>作为值。Cast map <K,shared_ptr <V>>来映射<K,shared_ptr <const V>>?

从一个函数中,我想返回一个对这个地图的引用,但是std::shared_ptr<const V>作为值类型,那有可能吗?

这里是我想达到的目标:

#include <map> 
#include <memory> 

struct A { 
    std::map<int, std::shared_ptr<int>> map; 

    const std::map<int, std::shared_ptr<const int>>& ret1() const { 
     return map; 
    } 
}; 

但是这段代码不能编译:

error: invalid initialization of reference of type 
'const std::map<int, std::shared_ptr<const int> >&' 
from expression of type 'const std::map<int, std::shared_ptr<int> >' 

感谢

回答

1

A型T和类型const T相关但最终不同类型。如果您不希望ret1的调用者修改地图中的值,请返回地图的副本,或者接受对地图的引用作为参数,然后将这些键和值复制到该地图中。

相关问题