Я немного ударился головой о кирпичную стену и решил отправить и просто опубликовать свою ошибку.
У меня есть шаблон (показанный ниже), который передает std :: map, которыйвнутри пространства имен.Это прекрасно компилируется.
Моя проблема возникает при попытке вызвать шаблон функции.Я получаю следующее сообщение об ошибке:
error: no matching function for call to
'getValuePointer(Muon*&, std::map<int, MET*, std::less<int>,
std::allocator<std::pair<const int, MET*> > >*&)'
Что я делаю не так?
Вот код шаблона:
#ifndef OBJECTMAPMATCH_H
#define OBJECTMAPMATCH_H
#include <map>
#include <utility>
#include <typeinfo>
#include <iostream>
#include <stdlib.h>
using namespace std;
namespace ObjectMapMatch {
template< class A, class B, class C >
C getValuePointer( A &x , map< B,C> &y )
{
if( y.find(x.Index()) != y.end() ){
return y.find(x.Index()).second;
}else{
cout << "ERROR:ObjectMapMatch::getValuePointer:Can not Find "
<< typeid(y).name() << " FOR " << typeid(x).name() << endl;
exit(1);
}
}
}
#endif
Вот пример вызова шаблонафункция
C = ObjectMapMatch::getValuePointer<ClassC*, int, ClassD*>(A, B);
Где:
C is ClassC*
A is ClassC*
B is std::map<int,ClassD*>*
Что я делаю не так?