[gelöst] komisches problem mit der typbestimmung bei template funktion



  • atm benutze ich folgenden code

    #pragma once
    #include <list>
    #include <algorithm>
    #include <tr1/functional>
    #include <iterator>
    #include <boost/type_traits/remove_pointer.hpp>
    
    using std::tr1::bind;
    using namespace std::tr1::placeholders;
    
    template <class T>
    struct h
    {
    	typedef std::list<T> li;
    	typedef typename std::list<T>::iterator it;
    };
    
    template <class T>
    T findItem(typename h<T>::li &l, int number) {
    	typename h<T>::it iter = find_if(
    			l.begin(), l.end(),
    			bind(std::equal_to<int>(),
                    bind(&boost::remove_pointer<T>::type::getNumber,_1),
                    number));
    	if(iter != l.end())
    		return *iter;
    	else
    		return 0;
    }
    

    wenn ich jedoch das remove_pointer loswerden will, und versuche, den pointer an verschiedenen stellen anzusetzen indem ich es entweder mit pointer in der hilfsklasse definiere, oder die hilfsklasse mit T* instanziere,

    bekomme ich haufenweise diesen fehler:

    Fehler: keine passende Funktion für Aufruf von »findItem(std::list<Exam*, std::allocator<Exam*> >&, int&)
    

    was mich verwirrt, da aus meiner sicht nix den int& impliziert

    *edit*
    lösung
    ich verwende jetzt einfach die tr1/type_traits


Anmelden zum Antworten