J'ai essayé de compiler l'exemple posté (http://stackoverflow.com/questions/412165/c-service-providers) et j'ai échoué avec VS8 VC9. J'ai peu d'expérience avec les templates.
Des suggestions ?
Merci.
Voici les erreurs :
dictionarystl.cpp(40) : erreur C2663: 'std::_Tree<_Traits>::find' : 2 surcharges n'ont pas de conversion légale pour le pointeur 'this'
dictionarystl.cpp(48) : erreur C2679: '[' binaire : aucun opérateur trouvé qui prend un opérande droit de type 'const type_info *__w64' (ou il n'y a pas de conversion acceptable)
#include
#include
#include
using namespace std;
class SomeClass
{
public:
virtual ~SomeClass() {} // fonction virtuelle pour obtenir une table v
};
struct type_info_less
{
bool operator() (const std::type_info* lhs, const std::type_info* rhs) const
{
return lhs->before(*rhs) != 0;
}
};
class TypeMap
{
typedef map TypenameToObject;
TypenameToObject ObjectMap;
public:
template
T *Get () const
{
TypenameToObject::const_iterator iType = ObjectMap.find(&typeid(T));
if (iType == ObjectMap.end())
return NULL;
return reinterpret_cast(iType->second);
}
template
void Set(T *value)
{
ObjectMap[&typeid(T)] = reinterpret_cast(value);
}
};
int main()
{
TypeMap Services;
Services.Set(new SomeClass());
SomeClass *x = Services.Get();
}