我一直在砖墙上碰撞一下头,并决定提交并发布我的错误。将映射传递给C++中的模板函数时出错
我有一个模板(如下所示),它传递一个名称空间内的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*>*
我在做什么错?
我构建了一个[类似的例子](http://ideone.com/Relqo),它运行良好。 –
这不是一个解决方案,但只是一个有用的注释 - 除非我错了,在这种情况下可以使用所谓的“模板类型推断”,并简化对'C = ObjectMapMatch :: getValuePointer(A,B) 。类型''将被自动推断 –
Nate
我将添加到Nate,您不仅可以,而且应该*应该使用模板类型推理(当然只适用于函数模板)。 –