Mirki i Mirabelki z #wroclaw, którzy interesują się #cpp, ze szczególnym uwzględnieniem #cpp11, #cpp14 i #cpp17 - będę prowadził mini kurs C++ ze złożoności obliczeniowej i biblioteki STL. Jeśli chcecie poszerzyć waszą znajomość C++, bo np. chcielibyście pracować jako programiści C++ to gorąco zachęcam. Tylko 3 lekcje po 5 godzin + prace domowe i projekt (opcjonalnie). Nielimitowane konsultacje online. Szczegóły i zapisy na stronie Coders School.

Dla was
LordLukin - Mirki i Mirabelki z #wroclaw, którzy interesują się #cpp, ze szczególnym ...

źródło: comment_3M4SXCfoNQcZM0UefSrxObn9EaC7Koih.jpg

Pobierz
#sprzedam #krakow
Mirki mam do sprzedania parę książek z #programowanie #informatyka
1. Skuteczny nowoczesny C++ z 2015 roku, tematyka c++11 i c++14 #cpp #cpp11 #cpp14
~30

2. Thinking in java wydanie IV wersja polska ~35 zl #java

3. Introduction to 3d game programming with DirectX 12, Frak Luna, wydanie angielskie - bardzo polecam. ~120 zl #windows10 #directx12

4. Twórz własne gry komputerowe w pythonie. Praktycznie nowa nie używana. Miał być prezent dla
Mam klasę abstrakcyjną Blob z funkcjami wirtualnymi Blob::fromArray(const QByteArray& raw) i Blob::toByteArray()->QByteArray. Weźmy jej klasę pochodną, Matrix; przeciążyłem operatory QDataStream w taki sposób:

QDataStream& operator<<(QDataStream& stream, const Matrix& in) {
stream << in.toArray();
}
QDataStream& operator>>(QDataStream& stream, Matrix& out) {
QByteArray tmp;
stream >> tmp;
out.fromArray(tmp);
}

Czy dla każdej klasy pochodnej muszę pisać to samo? Skorzystałbym z szablonów, ale nie chcę przeciążać operatorów dla klas innych niż te pochodzące od Blob...
Mam taką sytuację (bez strachu, kilka linijek tam jest i proste ale na Wykopie mało przejrzyście): http://pastebin.com/U5B9NTd1

No i teraz:
1) Czy usunięcie MyClassB spowoduje wywołanie tak destruktora MyClassB, jak i MyClass czy muszę się jakoś odwołać z destruktora MyClassB do MyClass, np. funkcją MyClass::del() w każdym z destruktorów?
2) Czy usunięcie MyClassA spowoduje wywołanie destruktora MyClass, czy też muszę uczynić destruktor MyClass wirtualnym żebym to się stało?

#cpp #cpp11 #cpp14 #
@lionbest: ten void* to tam sobie dodałem tak tylko dla przykładu. zresztą, delete na staticcast(this->voidptr) już ma sens. ale dziękuję za odpowiedź. :)
  • Odpowiedz
@Dijuna: Generalnie to tak jak masz napisane to powinieneś mieć virtual przy destruktorze, żeby działało zawsze (w MyClass). Dopóki nie pokażesz więcej kodu trudno powiedzieć co się stanie.
  • Odpowiedz
Clang ma rację, a GCC generuje Ci funkcje, które nie są constexpr. Po prostu źle zrozumiałeś standard:

A conditional-expression e is a core constant expression unless the evaluation of e, following the rules of the abstract machine (1.9), would evaluate one of the following expressions (...) a reinterpretcast.


Czyli wyrażenie jest constexpr, chyba że zawiera reinterpretcasta (lub jeden z kilku innych konstruktów).

Twoje funkcje set_a, set_b, ... zawierają reinterpret
  • Odpowiedz
Czesc,

chcialem napisac sobie funkcje compile-time, ktora zsumuje mi sizeof kazdego elementu w std::tuple, kod wyglada tak:
http://ideone.com/yNH8S3

dziala. Niby. Chcialem dodac sobie constraint za pomoca enable_if tak aby liczone to bylo tylko dla typow POD. Pozniej chce zrobic druga wersje dla mojego specjalnego typu, ew. wymagac, zeby klasy non-POD mialy metode size(). Tutaj cos mi sie wywala i kompilator na mnie krzyczy. Za cholere nie moge dojsc o co mu chodzi.
Mirki, znam dość dobrze C++, jednak widzę że język się zmienia, nowe wersje, inne sposoby, a ja znam tylko część z nich. Szukam więc jakiejś książki która opisuje najnowsze wersje C++. Nie chcę nic dla laika, żadnej nauki deklaracji zmiennych czy tłumaczenia polimorfizmu. Chcę być na bieżąco, pisać lepiej i szybciej. Możecie coś polecić? Co sądzicie np. o tej książce: http://www.empik.com/skuteczny-nowoczesny-c-meyers-scott,p1103920923,ksiazka-p ?

#cpp #cpp11 #cpp14
@frogi16: Świetna książka, mogę polecić. Głównie opiera się na porównaniu nowych elementów ze starymi i opisaniu, dlaczego są lepsze. Jeśli chcesz pisać lepiej, szybciej i "nowocześnie", spróbuj znaleźć jakiś problem (np. jakiś czas temu na matematyka.pl pomagałem jednemu z listą: http://www.matematyka.pl/392980.htm ) i rozwiązać go za pomocą najnowszych metod z C++. Przez samo przeczytanie nie zawsze da się wyłapać, co naprawdę C++11/14 zmienia czy też przed czym chroni.

Sam bardzo dużo
  • Odpowiedz
#cpp #cpp14 czy jeżeli mam listę wskaźników QList list i zrobię coś takiego:

for (void * ptr : list) {
delete ptr;
ptr = 0;
}
row.removeAll(0);

to DLACZEGO to zadziała? Tzn. bo działa ale wg mnie powinienem podać w pętli for referencję do wskaźnika, a tak to wskaźnik ptr jest kopią tego z listy więc przypisanie mu wartości 0 nie powinno działać. Ew. jak zrobić tak by nie działało? Tzn. wiem,
@Djuna: @michak: ale tu ekspertów xd
rzeczywiście, ptr jest w tym przypadku kopią wskaźnika. Natomiast działa to w połowie tak jak chcesz - tworzona jest kopia wskaźnika ptr, zwalniana jest pamięc pod tą kopią (równocześnie pod oryginałem - przecież wskazują na ten sam obszar pamięci. Poźniej przypisujesz NULLa do kopii, nie do oryginału. Jeśli chcesz również przypisać NULLa do oryginału, to musisz zrobić tak jak napisałeś - referencje to wskaźnika.
  • Odpowiedz
Wlasnie przeczytalem fajny artykul odnosnie Aspect oriented programming (nie chce spojlerowac teraz, pozniej wkleje link) w ktorym natknalem sie na bardzo ciekawy kod.

Jak sadzicie co robi ponizsza funkcja ?

template
void foo(F f, A&&... args) {
(void)(int[]) { (f(std::forward(args)),0)... };
}

#cpp11, #cpp14, #cpp, #programowanie
template

void foo(F f, A&&... args) {

(void)(int[]) { (f(std::forward(args)),0)... };

}


@japer: @Ginden: przecież jest ok, normalny cpp

@dagon_666: jest to szablon funkcji, który jako argument templatki pobiera jakiś funktor (pointer na funkcje, lambdę, jakiś obiekt z przeciążonym operatorem nawiasów), a jako drugi argument listę typów argumentów do wywołania tego funktora. Jako parametr funkcji brany jest funktor przez kopię i tzw. forwarding reference na dowolną liczbę argumentów dowolnego
  • Odpowiedz
No nie wiem. Napieprzanie makrami, zewnętrzne narzędzia do prekompilacji kodu = kolejne zaleƶności (w uƶyciu jest sed, ciekawe czy testy na windows wypadły pomyślnie). Do tego stwierdzenia wyraźnie nieprawdziwe w readme, np:

Without symbols (or other similar constructs), it is not possible to write such a generic print_member function. Without, one would have to write the three version accessing the three different members.
  • Odpowiedz
Okej, ale dlaczego uważasz, że akurat kod C++11 ma nie mieć ifdefów?


@vipe: Ja tak nie uwaƶam, ja napisałem, ƶe kod w bibliotekach typu Qt/Boost (i ogółem kod, który ma się kompilować zarówno w C++03 jak i w C++11 - i brać z tego korzyści) musi być usiany ifdefami.

kiedy można powiedzieć że projekt jest C++11 only?


Miałem na myśli projekt, którego nie skompilujesz w C++03, bo korzystasz z ficzerów "C++11
  • Odpowiedz