Tento web používá soubory cookie. Dalším používáním webu s tímto souhlasíte.
jméno
heslo
přihlásit
zaregistrujte se
zapomněli jste heslo?
C++ (11+) -- *cross platform development* aneb "Shadow of the Beast"
UETOYO
C++
Tématicky je vítáno vše, co souvisí s C++, obzvláště verze standardu 2011 a novější.
Preferovány jsou *cross-platform* knihovny a software.


Pište s diakritikou, formátujte prosím zdrojový kód ukázek.
Pokud nemáte rádi C++ a preferujete C, pak jsou tu jiné diskuze (my máme C rádi).
Pokud víte více než ostatní, dokažte to příkladem, odkazem na specifikaci atd.
Buďte trpělivý, C++ je plné záludností.


{Na záhlaví se teprve pracuje. Nicméně pro začátek:}

Literatura
(bude doplněno)

Internetové zdroje

Dokumentace standardní knihovny
https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/
https://msdn.microsoft.com/en-us/library/cscc687y.aspx

Obecné
https://isocpp.org/

Kompilace
g++ -- *compiler-driver* pro GCC: GNU Compiler Collection http://linux.die.net/man/1/g++
Clang  -- *frontend* pro LLVM kompilátor; http://clang.llvm.org/
Emscripten -- kompilátor C/C++ do JS; http://kripken.github.io/emscripten-site/

Rozšíření standardní knihovny
Boost http://www.boost.org/

GUI
Qt Framework http://qt-project.org/
wxWidgets https://www.wxwidgets.org/

Multimédia
JUCE: http://www.juce.com/
OpenFrameworks: http://www.openframeworks.cc/

Testování
GoogleTest/GoogleMock

Propojení C++ s jinými jazyky (JavaScript, Lua, Python atd.)
Máte k tomu co říct? Vložte se do diskuze.
VEVERAK --- 22:38:17 29.3.2018
ANT_39: Ja prave se dostal do faze ze uz algoritmy jsou pro mne citelnejsi ... nicmene s tim x.do_stuff(); mas pravdu, schazi tu neco jako std::for_each(container, do_stuff);
ANT_39 --- 17:55:34 29.3.2018
VEVERAK: Ja to obcas zkousim, ale mimo nejake sorty a podobne "velke" algoritmy mi to nepripadne moc prakticke. Takovy to for (auto const &x: xs) x.do_stuff(); mi v porovnani s std::for_each pripada citelnejsi, a ten zapis byva i kratsi.

Tu a tam narazim na potrebu napsat neco jako je v Pythonu print ",".join(foo(i) for i in kontejner), a co jsem se koukal par let zpatky, tak cyklus s booleanem, ktery ridi zda "," vypsat, nebo ne, byl proste nejcitelnejsi reseni.

V zasade jsem z tech algoritmu celkem zklamany. Ten jazyk porad jeste nema expresivitu, aby se to vyplacelo. Cast problemu je asi v tom, ze mam oko natrenovane na cteni te rozvinute formy, ale faktem je, ze kdyz se kouknu na tu syntaktickou polivku, ktera kolem toho volani algoritmu typicky vznikne, tak to radsi prepisu zpatky.

Poslednich par let ale C++ sleduju jen dost zdalky, mozna se to s C++17 zlepsilo.
VEVERAK --- 18:11:13 28.3.2018
Vzhledem k tomu ze na tom byl v mem projektu prostor, tak jsem si rekl ze na truc kromne util/ nikde nepouziju for/while.
Po case to zaclo drhnout na dvou vecech:

- Psat pokazde container.begin() a container.end(), hlavne v situacich kdy se jedna o delsi jmeno, je otrava a kazi to prehlednost.
- Par veci nejde udelat s standartnima algoritmama jednoduse (kombinovat je slozite za sebou nema smysl).

Skoncil jsem u toho ze jsem si napsal funkce forEach(Container container, UnaryFunction f) etc... ktere berou jen jeden argument (a ocekavaji begin()/end()) a doplnil par dalsich funkci na algoritmy ktere tam nejsou, napr: maxElement(container, f)

Ve finale to pro mne vedlo k sprehledneni kodu a jsem s tim i dlouhodobe spokojeny. V tenhle moment kdyz vidim kus kodu tak mam jasne co za algoritmus je spusteny nad daty a kontextove je typicky jasne kdy a jak se spousti dana funkce a kcemu asi slouzi, neni potreba analyzovat cely kus kodu. (Coz je fajn.)

Ovsem uznavam ze to kromne mne nikdo jiny necte takze muze byt biased nazor.
FXXXX --- 11:32:14 28.3.2018
GitHub - lefticus/cppbestpractices: Collaborative Collection of C++ Best Practices
https://github.com/lefticus/cppbestpractices
KOJA --- 22:57:34 28.7.2017
UETOYO: Presne! Moje prvni reakce na novinky v C++17 tehdy bylo, ze jsem zacal procitat tutorial k Rustu :-)
Pro realne pouziti tam kde je to vhodne (ano tautologie, sorry neumim se vyjadrovat) mi C++ jeste neprijde tak mimo optimum abych ted hned presedlaval ale prubezne se rozhlizim a premyslim. Zatim mam jenom takove fragmenty co se mi na ruznych jazycich libi a treba z toho postupne slepim ultimatniho kockopsa :-) C++ mi prjde, ze je sveho druhu prukopnik, ze proste takhle dlouhou a dalekosahlou evoluci asi jiny jazyk nezazil a tudiz se to vsichni zucastneni porad vlastne uci. Prijde mi to trochu jako kdyby se velka firma co vyrabi letadla pokusila promenit treba na retezec restauraci.

Tyjo, ty metaclasses, to je poradnej kalibr. Taky na to kouknu radsi jeste jednou a poradne.
UETOYO --- 21:49:24 28.7.2017
KOJA: Díky za odkaz... projdu si to o víkendu. Přes nos mi ještě přešlo toto: https://herbsutter.com/2017/07/26/metaclasses-thoughts-on-generative-c/
Popravdě s C++ mám takový manio-depresivní období... když se podívám třeba na D nebo Rust a vidím ten rozdíl v ergonomii jazyka... V C++ jde vše, ale za jako cenu...
KOJA --- 20:47:47 28.7.2017
UETOYO: Jeste jsem koukal na prezentaci o Ranges od Erica Nieblera ktera je tam zminovana.
CppCon 2015: Eric Niebler "Ranges for the Standard Library"
https://www.youtube.com/watch?v=mFUXNMfaciE

Je to vice-mene step-by-step popis toho prikladu s formatovanim kalendare. Posledni cca pulhodina jsou dotazy a pro mne byly asi jeste zajimavejsi (sentinely, implementace operaci na nekonecnych ranges, o tom jak se to ma s typama pri manipulaci s ranges apod.)

Jak jsem na to koukal, tak mi ale doslo, ze za tema par radkama kodu s autodedukovanyma typama je hromada kodu ktery je pro nas uplne virtualni, prekladac si ho sice vygeneruje (treba kdyz si udela instance konkretnich sablon) ale AFAGK (google mlci) pristup k nemu nemame, takze je nutne si ho modelovat jenom v hlave. Videt je vlastne jenom meta-C++ kod, pripadne AST a interni reprezentace kodu v prekladaci a pak az assembler. Rikam si jestli by nebylo zajimave mit moznost premluvit prekladac aby skutecne vygeneroval a dumpnul C++ kod po vsech compile-time vypoctech a pred optimalizacema. Jedine relevantni tool o kterem vim a ktery ale ma trochu jiny uhel pohledu a nevim nakolik je to jen proof-of-concept je meta-debugger Metashell (Templight) z dilny Abela Sinkovics a jeho studentu.
ANT_39 --- 12:55:45 27.7.2017
KOJA: Ten talk jsem nevidel, ale osobne jsem z pouziti std::accumulate, std::transform atd. taky rozpacitej. Ted c++ nepisu, ale kdyz jsem to pred nejakou dobou zkousel pouzivat, tak mi vetsinou vyslo, ze for cyklus je prehlednejsi a cistsi.
KOJA --- 21:00:32 26.7.2017
UETOYO: Nejenomze posloucha ale dobre se na to i kouka. Me to malem dojalo.
Nektery veci jsem si "taky vymyslel" (triviality jako pouzit lambdu kdyz chci inicializovat const instanci pomoci funkce ktera bere v rozhrani referenci na vysledek), takze na jednu stranu jo, je zajimavy videt, ze nekdo uvazuje podobne.

Na druhou stranu mam ale trochu dilema protoze kdyz vidim kam tenhle zpusob psani v C++ vede (treba pokusy pouzit std::accumulate, std::for_each nebo std::transform namisto jednoducheho for cyklu), tak si pak v nekterych pripadech reknu, ze C++ na tohle proste nebylo navrzeny a radsi to napisu "C-ckove" protoze expression-oriented zapis je dost krkolomny a i ja sam bych na to za mesic taky mozna koukal jako pero z gauce. Pravda ale je, ze znacnou prekazku vidim v reprezentaci "kolekci" objektu pomoci dvou iteratoru vsude v STLku.

Na hodnoceni takovych tech znasilnovani ruznych operatoru pro syntakticky cukr (potazmo tvorbu DSL) mam zatim malo dat ale prozatim jsem spise opatrny protoze leccos vypada presne na takovyhle slidech moc hezky ale v realu se do toho zatim vzdycky bud pripletl nejaky zakerny detail C++ nebo byla implementace toho aparatu natolik slozita, ze pri pomysleni na jeho debugovani jsem ja i temer vsichni ostatni vymekli a napsali to "postaru" a jednoduse.

BTW nevite nekdo o nejake vetsi (verejne citelne) C++ code-base kde by byly takovehle novoty konzistentne pouzivane? Nebo aspon nejake sepsane zkusenosti a poznatky kde to drhlo?