Portál AbcLinuxu, 4. května 2025 22:56

Dotaz: C++ multiplatformová appka - preprocesor vs abstrakcia

hermes avatar 28.9.2020 01:00 hermes | skóre: 6 | blog: Elektro | BA
C++ multiplatformová appka - preprocesor vs abstrakcia
Přečteno: 297×
Odpovědět | Admin
Dajme tomu že máme aplikáciu pre viacero platforiem.

Jedna trieda má implemetáciu nezávislú pre každý operačný systém. Ako by ste ju začlenili do zvyšku systému?
  1. urobil by som jednu triedu a a pre každú platformu by som napísal iný ifdef.
  2. urobil by som jedno rozhranie ktoré by pre každú platformu implemetovala iná trieda. A potom by som cez IoC kontainer vložil tú správnu toriedu podľa platformy. Ostatné triedy by si cez konštruktor pýtali rozhranie... Nie triedu. Takže bolo by jednotné rozhranie ale vždy s inou implemetáciou. To či by boli jednotlivé implemetácie v statickej triede alebo niekde inde je už len implemetačný detail.
  3. iné riešenie... Napíšte aké.
POZN: pojmom rozhranie v C++ myslím abstraktnú triedu iba s virtuálnymi public metódami bez tela.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.9.2020 09:11 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: C++ multiplatformová appka - preprocesor vs abstrakcia
Odpovědět | | Sbalit | Link | Blokovat | Admin
Skôr by si mal povedať: implementácia jednej triedy závisí od operačného systému. Nie?

Ja som to robil tak, že ifdef-mi riešim jednotlivé systémové funkcie - napr. fopen() vs _fopen(), alebo si urobím pre také funkcie a typy wrapper, ktorý je vnútri ifdef-nutý podľa platformy (napr. fopen() vs. CreateFile()). Niekedy rovnako pomenované funkcie mám v dvoch zdrojákoch a podľa platformy použijem v projekt-file ten správny (foo_win.c vs foo_lin.c).

Záleží na tom, aké platformy to sú a v čom sa líšia. Cieľom by asi malo byť, aby sa prípadná oprava bugu nemusela robiť pre každú plaformu zvlášť, resp. aby tie miesta, kde sa to robí pre obe platformy neboli "ďaleko" od seba. Aby sa ti nestávalo, že pre jednu to opravíš a pre druhú nie.
28.9.2020 09:33 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: C++ multiplatformová appka - preprocesor vs abstrakcia
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jednu třídu, pro každou platformu includovat jinou sadu maker, místo funkcí volat makra.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.9.2020 10:52 MadCatX | skóre: 28 | blog: dev_urandom
Rozbalit Rozbalit vše Re: C++ multiplatformová appka - preprocesor vs abstrakcia
Odpovědět | | Sbalit | Link | Blokovat | Admin
Definici třídy do headeru, implementaci do ".cpp" souborů s layoutem zhruba "myclass_common.cpp", "myclass_win32.cpp", "myclass_linux.cpp" apod. V makefilu nastavíš, jaká implementace se má na které platformě zkompilovat. Preprocesorové výhybky se vyplatí, pokud je (velká) většina kódu společná, jinak to začne být chaos.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.