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)
我究竟做错了什么?
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)
归档时间: |
|
查看次数: |
533 次 |
最近记录: |