1 votes

Aide pour corriger le code source, avec modèle

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();
}

2voto

ChrisN Points 10734

Pour que ce code puisse être compilé, la ligne suivante:

typedef map TypenameToObject;

devrait être :

typedef map TypenameToObject;

1voto

Brian Points 2013

Changer le typedef en ligne 33 pour lire :

typedef map TypenameToObject;

Cela corrigera au moins votre deuxième erreur. Je n'ai pas pu reproduire votre première erreur, mais je suppose que cela la corrigera aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X