[Lugge] [Fwd: [devel] allocare funzioni]

  • From: "Roberto A. F." <robang@xxxxxxxxx>
  • To: LUG lugge <LUGge@xxxxxxxxxxxxx>
  • Date: Thu, 24 May 2001 22:24:51 +0200

Ciao,

 prego ammirate la magnificenza di questa risposta !
 compila e funge (ovviamente)



Simone Piunno wrote:

> giovedì, 24 maggio 2001 alle 20:11:31, Roberto A. F. ha scritto:
>
> > se ho una funzione del tipo
> >
> > int priv_variable(int flag, int val) {
> >  static int mia_var = 0;
> >
> >  switch(flag) {
> >     case SET:
> >         mia_var = val
> >         break;
> >
> >     case GET:
> >   }
> >
> >  return mia_var
> > }
> >
> > cioe` che incapsuala una variabile (o una serie) e avessi voglia di
> > allocarmi dinamicamente un buffer di queste funzioni del tipo
> >  (che tipo devo usare ? function ?) * mio_buffer[10];
> >  for(i = 0; i < 10; i++) mio_buffer[i] = (function *)malloc(
> > sizeof(priv_variable) );
>
> al limite un buffer di puntatori a funzione.
> devi usare il tipo della funzione e lavorare di parentesi per far
> capire al compilatore come stanno le cose (le parentesi hanno
> precedenza su tutti gli altri operatori).
>
> int (mio_buffer)()[10];
>
> la malloc non la puoi e non la devi fare.
> in ogni caso se stai cercando di fare tante mia_var non ce la farai.
> C non è a oggetti.
> Invece puoi fare questo:
>
> #include <stdio.h>
>
> typedef struct {
>     char *nome;
>     int (*esegui)(int a, int b);
> } operazioni;
>
> int somma(int a, int b) { return a+b; }
> int sottrazione(int a, int b) { return a-b; }
> int prodotto(int a, int b) { return a*b; }
>
> static operazioni op[] = {
>     { "sommando",      somma       },
>     { "sottraendo",    sottrazione },
>     { "moltiplicando", prodotto    },
>     { NULL,        NULL        }
> };
>
> int main(int argc, char **argv) {
>     int a = 1, b = 2;
>     int i;
>     operazioni *p = op;
>
>     while (p->nome) {
>         printf(
>             "%s %d e %d si ottiene %d\n",
>             p->nome,
>             a, b, (p->esegui)(a, b)
>         );
>         p++;
>     }
>     return 0;
> }
>
> Se invece stavi parlando di C++ allora IMHO stai sbagliando design.
>
> --
> Di NO! alla censura su internet.
> Firma la petizione di Punto-Informatico.
> http://www.punto-informatico.it/petizione.asp
>
> _______________________________________________
> Lista devel - devel@xxxxxxxxxxxxxxxx
> http://mailman.ferrara.linux.it/listinfo/devel

--

  ,__    ,_     ,___    .-------=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-.
  ||_)   ||\    ||_    /     Proud Member & Master of the LUGGE    |
  || \   ||¯\   ||¯      linuxgrp: http://lugge.ziobudda.net       |
  ¯¯  ¯° ¯¯  ¯° ¯¯  °    homepage: http://digilander.iol.it/robang |
\ Roberto A. Foglietta   icq uin : 1087 18 257, E=s*aurimento²     |
 `---------------------=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'

Contro la censura on-line firma la petizione:
 http://www.punto-informatico.it/petizione.asp

Art. 21. Tutti hanno diritto di manifestare liberamente il proprio
pensiero con la parola,lo scritto e ogni altro mezzo di diffusione.
La stampa non può essere soggetta ad autorizzazioni o censure.

Art. 33. L'arte e la scienza sono libere e libero ne è l'insegnamento.

                                Estratto della Costituzione italiana.




Other related posts: