在地图中存储引用

时间:2015-03-31 08:10:01

标签: c++ reference stdmap

我尝试将foo对象存储到std::reference_wrapper中,但我最终得到了一个我不理解的编译错误。

#include <functional>
#include <map>

struct foo
{
};

int main()
{
    std::map< int, std::reference_wrapper< foo > > my_map;
    foo a;
    my_map[ 0 ] = std::ref( a );
}

编译器错误非常冗长,但归结为:

error: no matching function for call to ‘std::reference_wrapper<foo>::reference_wrapper()’

我究竟做错了什么?

1 个答案:

答案 0 :(得分:6)

std::reference_wrapper不是默认构造的(否则它将是一个指针)。

my_map[0]
如果0不是映射中的键,则

创建映射类型的新对象,为此映射类型需要默认构造函数。如果您的映射类型不是默认构造的,请使用insert()

my_map.insert(std::make_pair(0, std::ref(a)));

emplace()

my_map.emplace(0, std::ref(a));