Re: C++ Makro, template, nebo něco jiného?

Jindroush jindroush na seznam.cz
Pondělí Září 25 13:25:41 CEST 2023


Prvni dotaz - proc to neni tak, ze IDev je predek a ma membery virtual, 
takze pak neni treba to saseni s tim castovanim?
Druhy dotaz - proc jsou tam pointery v tom poli a ne reference? A proc 
se to castuje 2x?

Tj. pak se to zkrati na neco jako
rc = devs[deviceIndex].setSomeParam( param );
if( rc )
   g_lastError = devs[deviceIndex].lastError();

A setSomeParam bud udelat s promennym poctem argumentu, nebo radeji asi 
s default argumenty a tak, aby pro vsechna zarizeni byla stejna.
J.

On 25.09.2023 13:03, Pavel Hudeček wrote:
> Dobrý den všem,
> mějme funkci jako
>
> int doSomeWithDev(unsigned deviceIndex, int param)
> {
>     std::vector<IDev*> devs = gDevs->devices();
>     IDev* dev = devs[deviceIndex];
>     IDevTyp* devt = dynamic_cast<IDevTyp*>(dev);
>     if (!devt)
>         return UNEXPECTED_ERROR;
>     int rc;
>     IDevTyp2* devT2;
>     IDevTyp3* devT3;
> #ifdef IDevTyp4
>     IDevTyp4* devT4;
> #endif
>
>     switch(devt->deviceType()) {
>         case DEVTYPE2:
>             tevT2 = dynamic_cast<IDevTyp2*>(dev);
>             if (!tevT2)
>                 return UNEXPECTED_ERROR;
>             rc = tevT2->setSomeParam(param);
>             if (rc){
>                 gLastError = tevT2->lastError();
>             }
>             break;
>         case DEVTYPE3:
>             tevT3 = dynamic_cast<IDevTyp3*>(dev);
>             if (!tevT3)
>                 return UNEXPECTED_ERROR;
>             rc = tevT3->setSomeParam(param);
>             if (rc){
>                 gLastError = tevT3->lastError();
>             }
>             break;
> #ifdef IDevTyp4
>         case DEVTYPE4:
>             tevT4 = dynamic_cast<IDevTyp4*>(dev);
>             if (!tevT4)
>                 return UNEXPECTED_ERROR;
>             rc = tevT4->setSomeParam(param);
>             if (rc<0) {
>                 gLastError = tevT4->lastError();
>             }
>             break;
> #endif
>         default:
>             gLastError = "Unexpected device type";
>             rc = UNEXPECTED_ERROR;
>             break;
>     }
>     return rc;
> }
>
> A takových má být mnoho, s odlišnostmi jen v tom, co bude místo
> ->setSomeParam(param);
> a kolik to bude mít parametrů.
>
> Chtěl bych to nějak zjednodušit, aby ty funkce nebyly tak dlouhý.
> Nějaké nápady?
>
> Díky,
> PH
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


-- 
Jindroush<jindroush na seznam.cz>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20230925/ce1ea190/attachment.htm>


Další informace o konferenci Hw-list