Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Classe template che accetta puntatore a funzione

0 views
Skip to first unread message

Darkbyte

unread,
Nov 26, 2009, 1:06:50 PM11/26/09
to
Ho una classe templetizzata MyClass, che ha una funzione membro clear
() che accetta come unico parametro un puntatore a funzione. Questa
funzione ha come unico parametro un elemento el di tipo T.
Praticamente richiamando la clear() e passandole l'idirizzo di una
funzione f(), quando la clear() dovrà eliminare i dati li passerà ad f
() che si occuperà dell'eliminazione vera e propria.

Se dichiaro:

template <class T>
class MyClass
{
public:
void clear(void(*f)(T el));
}

E fin qui tutto ok, se dichiaro:

MyClass <int *> myclass;
void myfunction(int *el);

allora la chiamata:

myclass.clear(myfunction)

funziona tranquillamente.

Ora però sto creando un'altra classe contenitrice (chiamiamola
ExternalClass) che userà MyClass come oggetto di memorizzazione dei
dati, ed anche questa classe "esterna" ha una funzione membro chiamata
clear() che richiama la MyClass.clear().
A questo punto quindi alla MyClass.clear(void (*f)(T el)) dovrei
passare una funzione *membro* della classe esterna ExternalClass che
faccia la delete dei puntatori ricevuti (la funzione membro di
ExternalClass la chiamo per esempio fcleardata()), ma il compilatore
mi dice: No matching function for call MyClass<int *>::clear(void
(ExternalClass::*)(int *))

La funzione ExternalClass::clear() è dichiarata ed implementata come
void ExternalClass::fcleardata(int *).

Come posso procedere?

Mi trovo su Mac con XCode e compilatore g++ 4.2.1

Darkbyte

unread,
Nov 26, 2009, 1:16:43 PM11/26/09
to
Per il momento ho dichiarato la funzione membro
ExternalClass::fcleardata(int *) come static, e funziona anche da
privata (che è pure meglio).
Se ci sono altri modi, ben vengano!!!
0 new messages