C++ Makro, template, nebo něco jiného?
Pavel Hudeček
edizon na seznam.cz
Pondělí Září 25 13:03:02 CEST 2023
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
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20230925/be5ade06/attachment.htm>
Další informace o konferenci Hw-list