wskaźnik na szablon funkcji

0

mam metodę klasy Pqueue:

template<typename Type>Pointer<Type> Pqueue<Type>::getpointer(parg args,Type * target)
{
    Type * help;
    for (unsigned int i=0; i<pqueue.size(); i++)
    {
        if ( args<pqueue[i]>(target) )
        {
            help=pqueue[i];
            return Pointer<Type*>(true,&help);
        }
    }
    return Pointer<Type*>(false,NULL);
} 

a tutaj definicja klasy pqueue:

template<typename Type>class Pqueue
{
public:
    vector<Type*>pqueue;
public:
    typedef bool( * parg )(Type*);
    void add(Type * pointer);
    void remove(Type * pointer);
    int size();
    Type * operator [] (int index);
    Pointer<Type> getpointer(parg arg,Type * pointer);
    Pqueue();
    Pqueue(Type* target);
    Pqueue(vector<Type*> target);
    Pqueue(const Pqueue& target);
    ~Pqueue();
}; 

i definicja klasy pointer

template<typename Type>struct Pointer
{
    Type * wpointer;
    bool correct;
    Pointer<Type>();
    Pointer<Type>(bool Correct,Type * pointer);
    Pointer<Type>(const Pointer<Type> & target);
    ~Pointer<Type>() {}
}; 

a tutaj błąd:

nta.hpp|210|error: comparison between distinct pointer types 'Pqueue<Window>::parg {aka bool (*)(Window*)}' and 'Window*' lacks a cast [-fpermissive]| 

jak naprawić ten błąd?

0

No i która linia to jest ta 210?

0

ups, no faktycznie nie widać ;) błąd dotyczy tej linijki

if ( args<pqueue[i]>(target) ) 

args to wskaźnik na szablon funkcji która zwraca bool i przyjmuje wskaźnik na klasę Window... ale kiedy podaję ten wskaźnik to wywala błąd

0

w międzyczasie posprawdzałem pare rzeczy i okazało się że to problem z szablonem... tylko jak mam zrobić wskaźnik na szablon funkcji?

0
#include <iostream>
using namespace std;

template<typename T>
class Foo
{
    public:
    Foo(){}
}; 

typedef Foo<int>* fooIntPointer;

int main() {
    fooIntPointer ptr = new Foo<int>();
    return 0;
} 

to jest co prawda szablon na klase. Ale na funkcje bedzie podobnie.

0

spróbuj tak:

template<typename Type>
Pointer<Type> Pqueue<Type>::getpointer(parg args, Type* target)
{
    Type* help = NULL;

    for(unsigned int i = 0; i < pqueue.size(); i++)
    {
        if(args(target))
        {
            help = pqueue[i];

            return Pointer<Type>(true, help);
        }
    }

    return Pointer<Type>(false, help);
}
0

sprawdziłem ten sposób:

    template<Type *>bool helpargs(Type *);
    typedef helpargs<Type * target>* parg; 

i nie działa... nadal nie wiem jak to zrobić

1
Niikelion napisał(a):

w międzyczasie posprawdzałem pare rzeczy i okazało się że to problem z szablonem... tylko jak mam zrobić wskaźnik na szablon funkcji?

Nie można zrobić wskaźnika na szablon funkcji.

0

no to wszystko jasne

2

rozwine wypowiedz @twonek

Wskaznik mozesz zrobic na konkretny typ szablonu (konkretyzacja). Jezeli chcesz miec wskaznik na szablon ktory bedzie intem czy obiektem typu Foo to mozesz to zrobic (popatrz ze w moim przykladzie wskaznik na klase jest typu int)

NIE MOZESZ zrobic wskaznika ktory jest "generalny" (w sensie jest typu Type) bo szablon to szablon. On zostaje wygenerowany podczas kompilacji.
Mialbys przez to wskazniki ktore maja te same nazwy ale zwracaly by rozne typy, co jest nie mozliwe

http://ideone.com/MbuONC

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0