» »

C++ / KPartManager, QPtrList

C++ / KPartManager, QPtrList

BigWhale ::

Banzai!

Naj mi nekdo tole razlozi. PartManager ima metodo parts(), ki vraca listo vseh
partov... Takole je to v manualu:

const QPtrList< Part > * PartManager::parts () const
Returns the list of parts being managed by the partmanager.
Definition at line 515 of file partmanager.cpp.

QPtrList ima metodo find(), ki vrne index od iskanega elementa, ce ga najde.

int QPtrList::find ( const type * item )

Kako hudica tole povezati skupaj? Rad bi preverel, ce nek kpart ze obstaja in
je ze bil dodan v Manager.

Sedaj imam prt_manager, ki je objekt tipa KPartManager, notri sem dodal nekaj
partov in bi rad nasel en dolocen part.

Hm, da vidimo:

/* Tole je edina stvar, ki jo pozre compiler */
const QPtrList<KParts::Part> *mylist = prt_manager->parts();

/* Tole pa vec ne dela */
if (mylist.find(my_part)) /* tudi -> ne dela... */
{
/* ... */
}

Ugh, I feel like a newbie...

Vesoljc ::

v QPtrList dajemo naslove elementov, parts pa vrne naslov takega seznama. metoda find pa zopet sprejema naslov nekega elementa. zdej, al dela primerjavo na naslovih (imho, ne) al pa naredi deref na vsakem kazalcu. mylist mora biti pMyList :)

probaj tko...
pMyList->find(&MyItem);


ps: itaq je vse iz glave, tko da dont blame me ;)
Abnormal behavior of abnormal brain makes me normal...

BigWhale ::

QPtrList<KParts::Part> *partlist = (QPtrList<KParts::Part>*) prt_manager->parts();


Tole je bila resitev... Bemte const... (Hvala Aton)

Vesoljc, tisto ne dela, ker compiler javi error pri iskanju .find() oz ->find()

[edit by vsc - koda]
[edit by vsc - koda] [;)]

Zgodovina sprememb…

  • spremenil: Vesoljc ()

Vesoljc ::

aha...

parts vrne const objekt, find pa ni definirana kot const funkcija, zatorej moras naresti const cast (dekonstalizacija :D )
Abnormal behavior of abnormal brain makes me normal...

trs ::

Welcome to C++ hell :)

Vesoljc ::

hell it is :)

ampak zna biti const correct koda zelo ugodna...
Abnormal behavior of abnormal brain makes me normal...

trs ::

const je v C++ ena stvari ki jih najbolj sovrazim. Tipicen primer je fopen(), ali open() ... Te funkcije sprejmejo const char *, in edino ce ne uporabljas hard-codiranih stringov, moras parametre zmeraj castat v const. Const naj bi sluzil ravno temu, da se ne dela napak, ampak na zalost, te forca tudi vecino stvari kar kastat. Posledicno se glup programer nauci kastat vse zivo, in na koncu konst nima vec smisla... samo dodatno delo in preglavice ti dela.

Vesoljc ::

const correct

fopen, open? v c++? 8-)
Abnormal behavior of abnormal brain makes me normal...

trs ::

Zakaj pa ne? C++ je programski jezik, in ti ne sme preprecevat klicat system calle. fopen() se da se nekako nadomestit z iostreami, open() in podobne stvari pa nikakor ne. Ne vem zakaj bi bilo v C++u prepovedano klicanje system callov? Kaksen smisel ima to?

Kar se pa tice consta ... Vecina uporabnikov kar scasta stvar v const pointer pa je, in to delajo na veliko. Const correctness je se ena stvar c++ ki zgleda lepo na papirju ampak v praksi nima smisla. Programer se ne bo obremenjeval ce je koda const correct ali ne, in bo stvar kar skastal...

Sicer pa C++ naj bi bil backward compatible s Cjem. Ko so uvedli const restrikcijo, avtomatsko ni bil vec. Ce hoces vzet C kodo in jo prevest s C++ compilerjem... moras prej skastat vse stringe da se lepo prevede ...

Skartka, imam obcutek da const naredi vec problemov, kot jih resi.

Vesoljc ::

@trs
mas prav! (ampak se tud jest mal hecam).


eden plus, ki ga jest vidim pri uporabi const-a, so recimo uporabniki(programerji) nekega SDK-ja. ce je le-ta pametno spisan ter njegovi uporabniki razumejo const, jim to lahko resi mnogo tezav.
poglejmo si tale Qt, ki zivcira BW-ja :)

  /**
   * Retrieve a list of parts managed being managed.
   * [add by vsc - funny comment tale managed]
   **/
  const QList<Part> *parts() const { return &m_parts; }


funkcija je oznacena kot const, ker ne spremeninja nicesar, vraca pa pointer na konstanten seznam. to implicira, da bi uporabnik moral z spremenljivko, ki jo dobi, samo brati po seznamu, nic vec.

amm...
bigwhale, zakaj QList v QPtrList?
Abnormal behavior of abnormal brain makes me normal...

trs ::

Mogoce za APIje je uporabno, vendar v praksi sem imel vec problemov kot koristi s tem ;)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] LPC1343 - UART - AT commands

Oddelek: Programiranje
91139 (1029) JanezovJanez
»

[C] struct in int[] (strani: 1 2 )

Oddelek: Programiranje
657386 (6459) MrBrdo
»

arrayList, razred chain

Oddelek: Programiranje
51083 (1007) ERGY
»

[C++] Linker error

Oddelek: Programiranje
51294 (1294) Quikee
»

[c++] stil kodiranja, informativno

Oddelek: Programiranje
171943 (1759) CCfly

Več podobnih tem