PDA

Visualizza la versione completa : [c++]problema input e template


giuseppe500
22-09-2013, 15:57
ciao.
Utilizzo questo esempio perchè è il primo di una serie che mi viene in mente e che devo risolvere:
ho un oggetto CRenderer che si deve andare a prendere due valori:
1)la posizione
2)eventuali bottoni premuti

ora , vorrei realizzare un sistema per configurare questi due input in modo che possano arrivare da qualsiasi strumento di input: mouse , tastiera , joypad.

con le funzioni virtuali è molto semplice , basta creare una classe base che ha 3 funzioni virtuali posizione, bottoni e update e implementarle in ogni classe di controllo di input con la logica specifica di quello strumento di input.

probabilmente la implementero cosi , ma prima volevo chiedervi se è possibile implementare il tutto coi template,

per questo avevo pensato che le classi di input implementano le funzioni come quelle virtuali ,anche se non sono virtuali, solo che ho un problema :
1)se incapsulo nella classe Crenderer il gestore di input devo usare tre tipi diversi Input<Cmouse>,Input<Ckeyboard> ecc...

2)se rendo CRenderer una classe template che probabilmente è quello che dovrei fare mi vincolo, e questo è un problema ricorrente , nel senso che se voglio incapsulare la classe template crenderer<xxxx> non dispongo della classe base , quindi dovrei implementare tanti tipi CRenderer e questo non è generico.

forse si puo usare un traits che ritorna per il tipo crenderer il tipo che ho deciso di usare come CMouse o CKeyboard o CJoyPad?
e tutte le volte che ho una classe CRenderer incapsulata richiamo questo traits che mi ritorna l'input corrente che ho scelto nel traits, non so , ma ho cercato di esporre cio che non capisco su template e incapsulazione.

grazie.

MItaly
22-09-2013, 16:25
Consiglio: non complicarti la vita per niente. Questo è uno dei casi in cui l'astrazione del polimorfismo si mappa perfettamente sul problema e lo risolve in maniera semplice ed elegante: perché ti vuoi male e vuoi far su un pasticcio di template?

giuseppe500
23-09-2013, 15:48
grazie del consiglio ho capito Mitaly.
ciao :ciauz:

Loading