Siccome ho molto tempo libero, ho deciso di scrivere una versione personale di smart pointer.
Fra le altre cose vorrei che, dato un puntatore da me costruito, alla scrittura del seguente codice:

puntatore.sub (0, 1, 102,...,etc);

corrisponda un return di un puntatore che si veda sottratti gli elementi 0, 1 ,102...etc.
Ovviamente tutto ciò deve essere fatto in modo smart, cioè liberando la memoria inutilizzata.
Ho pensato, quindi, alla templatizzazione variatica :

template < class A > smartP  sub ( A a)  {
    le cose necessarie per togliere un elemento al puntatore e liberare la memoria non usata
}

template < class A, class ... B > smartP  sub (A a, B b)  {
    /** qualcosa di intelligente **/
}

purtroppo, però, quanto da me scritto non è sufficientemente intelligente e gli elementi tolti all'array sono fuori dal mio controllo.

Cosa scrivereste voi?

chiesto 28 Sep '14, 20:03

airordl's gravatar image

airordl
407596976

modificato 28 Sep '14, 20:55

@airordl: ho formattato un po' meglio la tua domanda, controlla che non abbia fatto errori. Inoltre ti chiedo di entrare un po' più in dettagli, dato che io, che conosco un pochetto di C++, ho capito abbastanza poco, figuriamoci chi non lo conosce proprio :)

(28 Sep '14, 20:14) enzotib ♦♦ enzotib's gravatar image

la funzione 'sub' è in overload tra una 'sub' che riceve un numero arbitrario di argomenti maggiore di '1' (la seconda) e una che ne riceve uno soltanto.

chiamandola, in un qualche main, con n>1 argomenti, viene chiamata (in modo necessariamente ricorsivo) la seconda, finchè degli argomenti non ne rimane uno solo.

a quel punto viene chiamata la prima.

(28 Sep '14, 20:41) airordl airordl's gravatar image

ex:

template < typename A > void funza (A a ) { clog<<a<<"@"; }

template < typename A, typename ... B > void funza (A a, B ...b) { clog<<":"<<a; funza(b...); }

int main () {

funza('a','b',3455,"ciao",true);

clog<<endl; }

da come output

:a:b:3455:ciao1@

chiaro, no?

(28 Sep '14, 20:42) airordl airordl's gravatar image

ogni volta il nuovo argomento diventa 'a' e il resto viene impacchettato in modo provvisorio in 'b...', detto 'pack'

con il primo faccio apparire una scritta su terminale, con quello che resta (il pack) richiamo funza... etc.

quando ne resta uno solo (true) viene chiamata l'altra funza e succede quel che succede

(28 Sep '14, 20:45) airordl airordl's gravatar image

il problema è che con questa impostazione vengono cancellati anche gli array successivi al secondo (da eliminare)...

altre idee?

(29 Sep '14, 19:30) airordl airordl's gravatar image
Scrivi tu la prima risposta!
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×109
×37

domanda posta: 28 Sep '14, 20:03

domanda visualizzata: 1,203 volte

ultimo aggiornamento: 29 Sep '14, 19:30

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.