Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - template e virtual
Forum - C/C++ - template e virtual

Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 17:21
Lunedì, 20/08/2012
nuovo giorno nuovo quesito:

"è possibile creare una classe template con una funzione virtuale che usa i tipi template per poi effettuarne l'overriding in una classe derivata specializzandone i tipi ?"

come si puo' fare altrimenti una cosa del genere??

Codice sorgente - presumibilmente C#

  1. class A<T,Y>{
  2.  
  3. public virtual T func(T t,Y y);
  4. }
  5.  
  6. class B : A<string,int>{
  7.  
  8. public string func(string s,int x) : A::func(s,x)
  9. {..............................}
  10.  
  11. }



:-?:-?:-?:-?:-?
in wait.......

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 1:01
Martedì, 21/08/2012
Non ho capito la domanda... sai per certo che e' possibile farlo ma non sai come oppure stai chiedendo se e' possibile farlo e se si come?

Il codice che hai scritto compila?


Il mio blog: https://piero.dev
PM Quote
Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 16:53
Mercoledì, 22/08/2012
scusami per la poca chiarezza.. ho cercato di scrivere un esempio esplicativo ed invece ho fatto solamente piu' confusione, stavolta mi spiego in modo piu' specifico.

in realtà io non so se è possibile farlo.
Il progetto sarebbe scrivere una libreria per lo sviluppo di applicazioni con il paradigma MapReduce (e poi usarla).
Ho scritto la libreria e compila (non so se funziona).
per testare la libreria volevo implementare il tipico wordCount e qui ho visto che
non so come effettuare l'override del metodo map generico scritto nella libreria.

in codice la classe generica mapper è così:

Codice sorgente - presumibilmente C++

  1. template <class Data,class k1,class v1,class k2,class v2,class v3>
  2. class mapper {
  3. public:
  4.     ........
  5.     virtual list <pair <k2,v2> > map(k1 key,v1 value);
  6.     .........
  7. };
  8.  
  9. #endif  /* mapper_H */



ed io vorrei fare una cosa così:

Codice sorgente - presumibilmente C#

  1. #include "mapper.h"
  2.  
  3. class wordMapper : mapper<FILE,string,string,string,int,pair<string,int> > {
  4. public:
  5.     .......
  6.     list<pair<string,int> > map(string key,string value);                                                  // qui sopra dovrei fare l'override
  7.     ........
  8. };



il codice scritto in questo modo ovviamente non costituisce un override del metodo map(k1 key,v1 value) della superclasse. E' questo che non so fare.

spero di essere stato chiaro. Grazie per l'aiuto.

Ultima modifica effettuata da tekdu il 22/08/2012 alle 17:01
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:10
Giovedì, 23/08/2012
Non si puo' fare; piu' informazioni sono state discusse qui: http://stackoverflow.com/questions/2354210/can-a-member-fu ...


Il mio blog: https://piero.dev
PM Quote
Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 16:31
Giovedì, 23/08/2012
Testo quotato

Postato originariamente da pierotofy:

Non si puo' fare;........



purtroppo l'avevo capito.. consigli per aggirare il problema?

PM Quote
Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 17:41
Venerdì, 24/08/2012
io vorrei solamente che l'utente che usa la libreria "sappia" che deve implementare la funzione con quel tipo di ritorno e con quei tipi di parametri.

Forse ho "javizzato" troppo il programma ed ora mi ritrovo ad un errore di progettazione.

L'unica cosa che mi viene in mente è dichiarare protected le funzioni template (togliendo virtual visto che non si puo') e fornirne un implementazione vuota specificando tutto nella documentazione. Ma così è proprio una cacca.:_doubt:

Ultima modifica effettuata da tekdu il 24/08/2012 alle 17:51
PM Quote