Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 3.678 pregleda

Najnovija ↓

Array of void i prosledjivanje funkciji 19.03.2008. u 21:29 · pre 226 meseci #1
Pozdrav!

Treba mi nacin da funkciji prosledjujem promenljivi broj i tip podataka (npr. (string, int, int) ili (string, string, double, string)).
Bakcem se tu sa void tipom, dinamickom alokacijom i dereferenciranjem ali sta god sam probao, prijavljuje mi nedozvoljeno koriscenje tipa + size of void unknown. Ne biste verovali, ali cak ni google ne pomaze. Svaka ideja je dobrodosla...

Unapred hvala!
Re: Array of void i prosledjivanje funkciji 19.03.2008. u 22:40 · pre 226 meseci #3
Da, zaboravio sam da kazem da variadic ne pomaze jer mi treba dobra kontrola nad prosledjenim argumentima (ispravite me ako gresim), tj. program ni u kom slucaju ne sme da padne ako mu se proslede nepravilni podaci (tj. vec pre pozivanja funkcije svi argumenti moraju tipski da se prokontrolisu + postoje i dodatna ogranicenja tipa taj i taj integer je iz skupa neparnih brojeva manjih od k). Izvinjavam se ako gresim, ali vec toliko razmisljam o tome da sam skoro zaboravio sta hocu...
Re: Array of void i prosledjivanje funkciji 30.03.2008. u 03:05 · pre 226 meseci #5
Evo mene opet. Cisto ako neko bude imao isto ovo pitanje, moze funkciji da prosledi niz pokazivaca na void (void**), ili pri inicijalizaciji prosledjuje void***. Posle toga mogu da se dodeljuju razne vrednosti.
Npr.

Code:

int initialize(void ***parameters) {
  *parameters = new (void*)[N];
  (*parameters)[0] = new int;
  (*parameters)[1] = new string;
  ...
  //pristup
  *(int*)((*parameters)[0]) = 5;
  *(string*)((*parameters)[1]) = "sta god"
}


Pozdrav!
Re: Array of void i prosledjivanje funkciji 30.03.2008. u 16:15 · pre 226 meseci #7
Za pocetak zaboravi void*.

Predlog 1.
Napravi klasa iz koje ces posle sa dynamic_cast da "konvertujes" u neki tip koji ti odgovara.

Npr
Code:

class Parametar  {  };
class IntParametar : public Parametar {public:  int i; };
class StringParametar : public Parametar { public: std::string s; };

int initialize( std::vector<Parametar*> &parameters)
 {
   parameters.push_back( new IntParametar );
   parameters.push_back( new StringParametar );
 }

int obradi( std::vector<Parametar*> &parameters)
 {
  IntParametar     *i = dynamic_cast<IntParameta*r>( parameters[0]) ;// ovako se stitis ako je kojim slucajem promasen tip
  StringParametar  *s = dynamic_cast<StringParametar*>( parameters[1]); // ovako se stitis ako je kojim slucajem promasen tip
  if( NULL != i )  cout <<  i->i << endl;
  if( NULL != s )  cout <<  s->s << endl;
 }

Ovde fale i pametni pointeri da ne bi imao likove kao memori.

Predlog 2.
Vidi boost::variant.
http://www.boost.org/doc/libs/1_35_0/doc/html/boost/variant.html
http://electra.lbl.gov/stuff/variant/doc/tutorial.html
Google: boost variant example

Potpis
AKA DDMM
Re: Array of void i prosledjivanje funkciji 31.03.2008. u 00:06 · pre 226 meseci #8
Hvala na savetima.

Predlog je dobar, ali nazalost kasno je stigao...
Vec sam sve uradio preko voida i radi "ko zmaj". Cinjenica je da sam morao sam da se osiguravam protiv promasenih tipova i da sam se malo izbedacio jer je ocigledno moglo elegantnije, ali sta je tu je... Zivot bi bio previse dosadan bez rupa u znanju OOP-a... :0

Pozdrav!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme