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 );
}
编译器错误相当冗长,但归结为:
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));