벽돌 벽에 머리를 대고 제출하여 제출하기로 결정했습니다.지도를 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*> > >*&)'
내가 뭘 잘못하고 있니?
C is ClassC*
A is ClassC*
B is std::map<int,ClassD*>*
내가 무슨 일을하고있는 중이 야 :
여기#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);
에 예를 호출입니다 : 여기
템플릿 코드?
[유사한 예제] (http://ideone.com/Relqo)가 만들어져 잘 동작합니다. –
해결책은 아니지만 도움이되는 메모입니다. 제가 틀리지 않는 한이 경우 "템플릿 유형 유추"라고하는 것을 사용할 수 있으며'C = ObjectMapMatch :: getValuePointer (A, B); 함수 호출을 단순화 할 수 있습니다. . 'TypeC, int, ClassD *>'타입은 자동으로 유추 될 것입니다. – Nate
Nate에 추가 할 수있을뿐만 아니라 템플릿 유형 유추를 사용해야합니다 (물론 함수 템플릿에만 적용됩니다). –