2009-10-13 11 views
17

Piszę mały program C++ dla zabawy i dla rozszerzenia mojej umiejętności C++. Ponieważ jego zakres jest stosunkowo niewielki, planuję również wypróbować rozwój wielu platform, dzięki czemu program ten obsługuje zarówno system Windows, jak i system Linux.Uczenie się i tworzenie międzyplatformowe (C++)

Uważam, że moja znajomość języka C++ mieści się gdzieś pomiędzy poziomem swobodnym i pośrednim: OO, trochę szablonów i wzorców projektowych, użył STL przed i próbując zagłębić się w szczegóły, ... Jednak podczas kodowania tego małego program, uważam, że im głębiej gramolę się w C++, tym bardziej odczuwam ból, szczególnie gdy zaczynam rozumieć i radzić sobie z różnicami między implementacją różnych platform/dostawców.

Korzystanie z platform wieloplatformowych, takich jak Qt, ACE, Boost, wydaje się być pomocne w przyspieszeniu rozwoju, co ułatwia życie, ale obawiam się, że to rozwiąże mój cel. Czy ktoś może udzielić porady, jeśli istnieje jakaś "najlepsza praktyka" do tworzenia międzyplatformowego C++? Dzięki.

Odpowiedz

16

Czy ktoś może udzielić porady, jeśli istnieje jakaś "najlepsza praktyka" do tworzenia międzyplatformowego C++?

Są trzy rzeczy:

  1. napisać własny kod tak, że jest to przenośny

  2. Wrap API dla konkretnych platform za pomocą warstwy abstrakcji/izolacja/użytkowego

  3. Wybierz wieloplatformowe biblioteki

Możesz wybrać opcję # 2 i/lub # 3.

Zalety # 3 powyżej # 2 to zazwyczaj: "Jest już napisane, debugowane i obsługiwane"; a wady są takie, jak: "Muszę się tego nauczyć, być może będę musiał za to zapłacić, niekoniecznie muszę to wspierać, i może nie robić dokładnie tego, czego chcę".

Deweloperzy często wolą opcję # 3 zamiast # 2, szczególnie jeśli jest to wolne oprogramowanie open source (które wszystkie trzy biblioteki, które wymieniłeś).

2

Chyba że robisz rzeczy z GUI, platforma krzyżowa nie jest dużym problemem.

Istnieje kilka drobnych problemów związanych z systemami plików (różne/\ separatory, dozwolone znaki w nazwach plików itp.), Ale są one na poziomie aplikacji, a nie C++.

Wykonanie ważniejszych aplikacji staje się bardziej złożone, musisz obsługiwać pomoc, lokalizować pliki, prawdopodobnie informacje o zabezpieczeniach i informacje o użytkownikach, w sposób międzyplatformowy. Dla prostego programowania typu algorytmu nie ma problemu.

Qt to głównie biblioteka GUI, mimo że ma dodatkowe systemy plików z wieloma platformami. STL, Boost, ACE to platforma krzyżowa, ale to nie jest główny punkt.

2

Skorzystaj z nich! Poważnie. Jedynym powodem, dla którego możesz , a nie, chcieć z nich skorzystać, jest to, że planujesz pracować w środowisku, w którym nie są dostępne. Biorąc jednak pod uwagę ich wieloplatformowy charakter, nie jest to prawdopodobne.

Przekonasz się, że korzyści, jakie możesz uzyskać z ich używania, są ogromne, nawet jeśli nie są dostępne na wielu platformach. "Najlepszą praktyką", o której mówisz, jest możliwość dostarczenia "produktu" tak szybko i łatwo jak to możliwe.

Kiedyś odpowiedziałem na pytanie od kogoś, kto stwierdził, że nie chce używać bibliotek GUI na poziomie wyższym niż Xlib. Gdyby kiedykolwiek użył Xlib, poznałby ból, który wszyscy czuliśmy, gdy zmuszeni bylibyśmy kodować na tak niskim poziomie abstrakcji. Ma to tyle samo sensu, co kodowanie w asemblerze, ponieważ C/C++? Python/Perl/everthting-else to po prostu abstarction wyższego poziomu.

3

Użyj gcc. Jest dostępny zarówno w systemach Windows, jak i Linux, a składnia bibliotek i języka jest identyczna na obu platformach.

Dla aplikacji GUI z wieloma platformami, Qt to dobry pomysł. Nie ma uciec od posiadania zależności od interfejsu GUI, jeśli próbujesz osiągnąć niezależność od platformy.

1

Myślę, że można się wiele nauczyć z używania bibliotek ACE lub równoważnych. zwiększą twoje zrozumienie C++ i wzorców projektowych. Myślę, że to najlepsza rzecz, jaką możesz zrobić, aby poprawić swoje umiejętności w zakresie programowania.

1

Jeśli naprawdę zależy Ci na tym, by Twój kod był jak najbardziej wieloplatformowy, używaj jak największej liczby kompilatorów. Jeśli korzystasz z systemu Windows i Linux, użyj VC i gcc, co najmniej. Zapewni to, że nie użyjesz funkcji specyficznych dla kompilatora i nie polegasz na zachowaniu specyficznym dla systemu. Użyj większej liczby kompilatorów (Intel, IBM itp.) I systemów operacyjnych (OS X, Solaris), jeśli masz do nich dostęp.

2

te odpowiedzi są naprawdę dobre i możesz utworzyć listę dla znalezienia, gdzie jest początek. ale myślę, że powinieneś przeczytać kilka artykułów na temat "aplikacji do przenoszenia" .nie jest to związane z rozwojem międzyplatformowym, ale może to dać ci bardzo dużą perspektywę na temat tworzenia różnych platform. W cross-platform rozwija, jeden z bardziej przywozu rzeczy są problemy z pamięcią typu „endian” (bajt zamówienia- kolejności bajtów może pokazać różnice dla Tehnologies lub platform)

2

użytkowania impuls. oni zajmują się dla ciebie różnymi platformami.

boost::filesystem jest doskonałym przykładem

13

http://blog.backblaze.com/2008/12/15/10-rules-for-how-to-write-cross-platform-code/

powinien dostarczyć więcej szczegółów do odpowiedzi już podanych.

Proponuję także wykorzystanie istniejących bibliotek, które charakteryzują się abstrakcyjną endianowością, rozmiarami i różnicami w typach danych. Przed rozpoczęciem projektu wieloplatformowego należy wziąć pod uwagę następujące kwestie.

GUI

  1. Qt
  2. XVT
  3. wxWidgets

ogólne Biblioteki/ramy

  1. STL (Incorporated in most platform libraries already)
  2. Boost

Gra Development

  1. SDL
  2. Cocos2d-x