<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Bohužel se jedná o úpravy již existujícího, poměrně rozsáhlého
    softwaru. Některé metody a atributy jsou společné, ty zůstávají v
    nadřazené třídě. Jiné nikoli a jsou definovány zvlášť ve svých,
    případně je některé mají a jiné ne. No a tam kde nejsou sploečné,
    vypadají funkce takto. <br>
    <br>
    Na mě právě teď mimo jiné je, vytvořit větší počet takových funkcí,
    jako náhradu za sady funkcí po 2, 3 nebo více, kdy v názvu je druh
    zařízení, což je relikt  z doby, kdy si kdosi myslel, že počet druhů
    bude 1 a pak že 2:-)<br>
    <br>
    PH<br>
    <br>
    <div class="moz-cite-prefix">Dne 25.09.2023 v 13:36 <a class="moz-txt-link-abbreviated" href="mailto:Pablo@xpablo.cz">Pablo@xpablo.cz</a>
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:1L.4FxwP.1JzT1jN9BeW.1b4N2j@seznam.cz">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div>DD,</div>
      <div>myslim, ze jste mel spis napsat, co je cilem. Takhle mame
        "cistit" reseni, ktere mohlo byt udelane jinak, ale co tam vidim
        ja:</div>
      <div>1. zbytecne vytvarite ukazatele na jednotlive tridy zarizeni
        (pokud ta abbrev dev znamena device), kdyz vzdycky budete
        potrebovat jen jeden a pri rozsirovani pomoci ifdef budete muset
        ifdef psat na dvou mistech. Doporucuji v kazdem case DEV...
        udelat lokalni ukazatel napr. takto <font face="Courier New,
          Courier, monospace">auto devT2 =
          dynamic_cast<IDevTyp2*>(dev);</font></div>
      <div>2. nejsem si jisty, jestli by nebyl lepsi pristup udelat
        predka, tridu IDev tak, aby obsahoval bud public prvek IDevTyp,
        nebo napsat getter na IDevTyp - zbavite se tim toho mambo-jambo
        se zjistovanim typu zarizeni</div>
      <div>3. kdyz udelate virtualni prototyp funkce lastError(), tak se
        cela saskarna if... gLastError = .... v kazdem case zjednodusi
        na jednu jedinou podminku pred return rc; nejak takhle:</div>
      <div>if (rc)</div>
      <div>  gLastError = devt->lastError();</div>
      <div>Otazkou ale je, jestli nebude lepsi mit v tride IDev
        virtualni metodu na nastaveni tech parametru a nedelat ji pure
        virtual - pak sice bude v kazdem potomkovi, ale prepsana bude
        jen tam, kde bude skutecne neco delat.<br>
      </div>
      -- <br>
      Pavel Brychta<br>
      <a class="moz-txt-link-freetext" href="http://www.xpablo.cz">http://www.xpablo.cz</a><br>
      <br>
      <aside>---------- Původní e-mail ----------<br>
        Od: Pavel Hudeček <a class="moz-txt-link-rfc2396E" href="mailto:edizon@seznam.cz"><edizon@seznam.cz></a><br>
        Komu: <a class="moz-txt-link-abbreviated" href="mailto:hw-list@list.hw.cz">hw-list@list.hw.cz</a><br>
        Datum: 25. 9. 2023 13:06:50<br>
        Předmět: C++ Makro, template, nebo něco jiného?</aside>
      <br>
      <blockquote data-email="edizon@seznam.cz"> Dobrý den všem,<br>
        mějme funkci jako<br>
        <br>
        <font face="Courier New, Courier, monospace">int
          doSomeWithDev(unsigned deviceIndex, int param)<br>
          {<br>
              std::vector<IDev*> devs = gDevs->devices();<br>
              IDev* dev = devs[deviceIndex];<br>
              IDevTyp* devt = dynamic_cast<IDevTyp*>(dev);<br>
              if (!devt)<br>
                  return </font><font face="Courier New, Courier,
          monospace">UNEXPECTED_ERROR;<br>
              int rc;<br>
              IDevTyp2* devT2;<br>
              IDevTyp3* devT3;<br>
          #ifdef IDevTyp4<br>
              IDevTyp4* devT4;<br>
          #endif<br>
          <br>
              switch(devt->deviceType()) {<br>
                  case DEVTYPE2:<br>
                      tevT2 = dynamic_cast<IDevTyp2*>(dev);<br>
                      if (!tevT2)<br>
                          return </font><font face="Courier New,
          Courier, monospace">UNEXPECTED_ERROR;<br>
                      rc = tevT2->setSomeParam(</font><font
          face="Courier New, Courier, monospace"><font face="Courier
            New, Courier, monospace">param</font>);<br>
                      if (rc){<br>
                          gLastError = tevT2->lastError();<br>
                      }<br>
                      break;<br>
                  case DEVTYPE3:<br>
                      tevT3 = dynamic_cast<IDevTyp3*>(dev);<br>
                      if (!tevT3)<br>
                          return UNEXPECTED_ERROR;<br>
                      rc = tevT3-></font><font face="Courier New,
          Courier, monospace"><font face="Courier New, Courier,
            monospace">setSomeParam(</font><font face="Courier New,
            Courier, monospace"><font face="Courier New, Courier,
              monospace">param</font>);</font><br>
                      if (rc){<br>
                          gLastError = tevT3->lastError();<br>
                      }<br>
                      break;<br>
          #ifdef IDevTyp4<br>
                  case DEVTYPE4:<br>
                      tevT4 = dynamic_cast<IDevTyp4*>(dev);<br>
                      if (!tevT4)<br>
                          return UNEXPECTED_ERROR;<br>
                      rc = tevT4-></font><font face="Courier New,
          Courier, monospace"><font face="Courier New, Courier,
            monospace"><font face="Courier New, Courier, monospace">setSomeParam(</font><font
              face="Courier New, Courier, monospace"><font face="Courier
                New, Courier, monospace">param</font>);<br>
            </font></font>            if (rc<0) {<br>
                          gLastError = tevT4->lastError();<br>
                      }<br>
                      break;<br>
          #endif<br>
                  default:<br>
                      gLastError = "Unexpected device type";<br>
                      rc = UNEXPECTED_ERROR;<br>
                      break;<br>
              }<br>
              return rc;<br>
          }<br>
        </font><br>
        A takových má být mnoho, s odlišnostmi jen v tom, co bude místo<br>
        <font face="Courier New, Courier, monospace">-></font><font
          face="Courier New, Courier, monospace"><font face="Courier
            New, Courier, monospace">setSomeParam(</font><font
            face="Courier New, Courier, monospace"><font face="Courier
              New, Courier, monospace">param</font>);</font></font><br>
        a kolik to bude mít parametrů.<br>
        <br>
        Chtěl bych to nějak zjednodušit, aby ty funkce nebyly tak
        dlouhý.<br>
        Nějaké nápady?<br>
      </blockquote>
    </blockquote>
  </body>
</html>