Bonjour,
Dans la série template et C++ j'ai un problème que je n'arrive pas à résoudre. Je me tourne alors vers la communauté Dev.com pour avoir votre avis sur la question.

Le code :
Vector2PartionHasher.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template< uint32 iXHash, uint32 iYHash >
class RoadNodePartitionHasher
{
public:
	static
	uint32 Hash( RoadNode const& oRoadNode )
	{
		// blabla
	}
 
	static
	uint32 Hash( RoadNode const* pRoadNode )
	{
		// blabla
	}
};
SearchTreePlane.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#define DEF_TYPE typedef std::list< T* > PtrTypeList
 
template < class T >
class SearchTreePlaneNode
{
protected:
	DEF_TYPE;
 
	uint32				m_iKey;
	PtrTypeList			m_oDatas;
	SearchTreePlaneNode< T >*	m_pLeft;
	SearchTreePlaneNode< T >*	m_pRight;
 
public:
	SearchTreePlaneNode();
	~SearchTreePlaneNode();
 
	// blabla...
 
private:
	void	Insert( uint32 iKey, T const* pData );
};
 
template < class T, class Hasher >
class SearchTreePlane : SearchTreePlaneNode< T >
{
	DEF_TYPE;
public:
	SearchTreePlane();
	~SearchTreePlane();
 
	void	Insert( T const* pData )
	{
		SearchTreePlaneNode<T>::Insert(Hasher::Hash( pData ), pData);
	}
};
Et le problème viens de là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
	RoadNode* pRoadNodeRet = new RoadNode;
	// Plus haut
	// SearchTreePlane< RoadNode, RoadNodeHasher > m_oRoadNodeBSTree
	m_oRoadNodeBSTree.Insert( pRoadNodeRet );
L'idée c'est comme vous pouvez le voir j'ai un arbre binaire de recherche qui prend pour clef un unsigned int, cet uint32 je l'obtient via un hasher qui est dans une classe qui contient uniquement des méthodes static avec soit des T const& soit des Tconst*.

Le problème c'est que VC++ ne trouve pas le hasher il me dit :
Error 16 error C2665: 'eMV::RoadNodePartitionHasher<iXHash,iYHash>::Hash' : none of the 2 overloads could convert all the argument types

Dans RoadNodePartitionHasher il le pRoadNodeRet n'est ni un const RoadNode&, ni un const RoadNode*, ni un RoadNode&, ni un RoadNode* !

Merci