2016-05-07 2 views
-1

У меня есть классC++ Создание карты двойной пары

template <typename _T, typename _E> 
class CRoute 
{ 
    public: 
    CRoute& Add(const _T & u1 , const _T & u2 , const _E & e); 
    ... 
    private: 
    map < _T, vector<pair<_T,_E>> > graf; 
}; 

Добавить функцию присвоить elemts для Graf;

НО! Я не могу использовать конструктор по умолчанию типов _T и _E. Из-за этого я не могу сделать следующее:

template <typename _T, typename _E> 
CRoute<_T,_E>& CRoute<_T,_E>::Add(const _T & u1 , const _T & u2 , const _E & e){  
    graf[u1].emplace_back(u2 , e); 
    return *this; 
} 

Я могу использовать только конструктор копирования. Как я могу это сделать?

+3

Пожалуйста, предоставьте [mcve]. – Barry

+0

Ваша пара значений ключа 'graf' -' std :: pair <_T, std :: vector > ', вы пытаетесь вставить' std :: pair <_T, std :: пара <_T, _E>> '. – user2296177

ответ

0

Вы можете черпать вдохновение из std::map::emplace_back и имеют свои собственные Add функции работают точно так же, принимая аргументы для построения _T и _E объектов, а не уже склеенные экземпляры этих объектов.

В противном случае вы можете использовать только ссылки rvalue и надеяться, что ваши типы будут подвижными.

Смежные вопросы