在地图中存储引用

qdi*_*dii 8 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 );
}
Run Code Online (Sandbox Code Playgroud)

编译器错误相当冗长,但归结为:

error: no matching function for call to ‘std::reference_wrapper<foo>::reference_wrapper()’
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Win*_*ute 6

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

my_map[0]
Run Code Online (Sandbox Code Playgroud)

如果0映射不是映射中的键,则创建映射类型的新对象,为此映射类型需要默认构造函数.如果映射类型不是可默认构造的,请使用insert():

my_map.insert(std::make_pair(0, std::ref(a)));
Run Code Online (Sandbox Code Playgroud)

或者emplace():

my_map.emplace(0, std::ref(a));
Run Code Online (Sandbox Code Playgroud)