在地图中存储参考

Storing references in a map

我试图将一个 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()’

我到底做错了什么?

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));