2015-03-31 2 views
8

Я попытался сохранить объект 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()’ 

Что именно я делаю не так?

+0

станд :: reference_wrapper не имеет конструктор не по умолчанию –

ответ

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)); 
Смежные вопросы