Použití různých verzí téže metody? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Použití různých verzí téže metody? – C / C++ – Fórum – Programujte.comPoužití různých verzí téže metody? – C / C++ – Fórum – Programujte.com

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

Jeník Veliký
~ Anonymní uživatel
1 příspěvek
16. 7. 2021   #1
-
0
-

Ahoj.

Řeším následující problém. Programuji optimalizační program v C++, který v závislosti na počátečním nastavení uživatele pro výpočet cílové funkce využívá různé předpisy (normy). Dejme tomu že máme pro výpočet cílové funkce způsob A, který vychází z nějaké normy, a způsob B, který vychází z jiné normy. To jaká norma bude použita nastaví uživatel před spuštěním programu. Zbytek programu je totožný. Během optimalizace se iterativně stále dokola volá ona cílová funkce. Samozřejmě existuje jednoduché řešení: při každém volání cílové funkce se pomocí IF podmínky rozhodnout podle jaké normy má počítat. Ale díky tomu, že by se program musel rozhodovat při každé iteraci mi to přijde trestuhodně neefektivní. Druhá možnost je vytvořit 2 nezávislé kódy a spustit jen ten s požadovanou normou. To je zase trestuhodné z hlediska duplicitního kódu.

Představoval jsem si, že vytvořím 2 různé třídy a při konstrukci objektu použiji zvolenou třídu pomocí IF podmínky. Tím by se program rozhodoval pouze jednou při vytváření objektu, ale při samotném iterování už by byl objekt jasně definovaný. Toto bohužel nefunguje, protože nelze objekty vytvářet v IF podmínkách. Jiný způsob, který by se mi líbil je nastavení správné metody pomocí parametru v konstruktoru. To bohužel asi také nejde.

Jsem začátečník a odpověď jsem nikde nenašel. Tak Vás třeba někoho něco napadne. Díky

Nahlásit jako SPAM
IP: 217.30.64.–
Kit+15
Guru
16. 7. 2021   #2
-
0
-

#1 Jeník Veliký
Řešením je dědičnost, polymorfismus a využití tovární metody.

Nahlásit jako SPAM
IP: 81.19.2.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
MilanL+1
Expert
17. 7. 2021   #3
-
0
-

#1 Jeník Veliký

nejednodušší mi přijde řešení které používají backcall funkce, vytvořit si proměnou s ukazatelem na funkci a do té při výběru vložit pointer na vybranou funkci a v následném kodu již volat funkci pomocí té proměnné.

EDIT: pokud to budeš hledat tak ne backcall ale callback

Nahlásit jako SPAM
IP: 185.112.167.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 47 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý