4 listopada 2008
Kategorie: programowanie | Tagi: C++, C++0x, standardy
komentarze: 0
Jak podaje Herb Sutter na swoim blogu w ostatniej notce „September 2008 ISO C++ Standards Meeting: The Draft Has Landed, and a New Convener„, draft nowego standardu C++ jest już dostępny publicznie do pobrania: The September C++0x working draft document. Jedynie można spodziewać się małych poprawek błędów i usprawnień w stosunku do ukończonej wersji standardu. [...]
czytaj całość »
3 listopada 2008
Kategorie: programowanie | Tagi: C++, code, explicit, type casting, type conversions
komentarze: 0
Konwersje typów zdefiniowanych przez użytkownika, czyli klas jest możliwa poprzez zdefiniowanie odpowiednich konstruktorów, aby umożliwić przekształcanie z jakiegoś innego typu na nasz typ lub odpowiednich operatorów przekształcania (czasem zwanych operatorami konwersji lub rzutowania) do przekształcania naszego zdefiniowanego typu w inny typ. class X { public: X(int n); operator int(); operator double(); }; Operator konwersji i [...]
czytaj całość »
31 października 2008
Kategorie: programowanie | Tagi: C++, code
komentarze: 1
Dziś kilka slow o funkcjach z zmienna liczba argumentów, czyli Variadic Functions ;) W ostatniej notce o makrach z zmienną listą argumentów wspomniałem o najpopularniejszej funkcji przyjmującej nieokreśloną liczbę argumentów – printf. Używanie takich funkcji jest bardzo proste, stworzenie również nie jest jakąś trudną i skomplikowaną sprawą. Niezbędne do tego celu typy i makra umożliwiające [...]
czytaj całość »
28 października 2008
Kategorie: programowanie | Tagi: C++, code, makra
komentarze: 1
Można się zdziwić, ale makra również mogą posiadać zmienną liczbę argumentów, tak jak funkcje. Najbardziej znaną funkcją o zmiennej licznie argumentów jest funkcja printf z standardowej biblioteki języka C: int printf(const char* fmt, …); Makra również posiadają taką możliwość, zwie się to, jak nazwa notki, – Variadic Macros. Proste makro TRACE opakowujące printfa: #define TRACE(fmt, [...]
czytaj całość »
24 października 2008
Kategorie: programowanie | Tagi: C++, safe exceptions
komentarze: 0
Kontynuujemy zabawy z wyjątkami ;) A co powiecie na zgłaszanie sytuacji wyjątkowych w konstruktorze globalnego obiektu? Co się stanie, gdy konstruktor rzuci wyjątkiem przed wejściem do funkcji main? Poleci zapewne terminate(). Jak zasygnalizować zaistniałą sytuację i „odwieść” program od wywołania terminate()? Obsłużyć wyjątek rzecz jasna ;) Jak przechwycić wyjątek z globalnych obiektów? Sprawa trochę skomplikowana, [...]
czytaj całość »
20 października 2008
Kategorie: programowanie | Tagi: C++, code, safe exceptions
komentarze: 0
Ostatnio trochę marudziłem o rzucaniu wyjątków w konstruktorach, to dziś może wspomnę o destruktorach i konstruktorach kopiujących. Każdy chyba wie, że nie należy rzucać wyjątków z destruktorów. To samo dotyczy konstruktora kopiującego obiektu wyjątku. Problem z destruktorami jest to związany z obsługą wyjątku przez kompilator (czas miedzy rzuceniem wyjątku a złapaniem go przez odpowiedni catch), [...]
czytaj całość »
17 października 2008
Kategorie: programowanie | Tagi: C++, code, safe exceptions
komentarze: 0
Wyjątki są najprostszą i najlepszą możliwością zgłoszenia błędów zaistniałych w konstruktorze, przez których tworzenie obiektu zakończyło się porażką. Bez sytuacji wyjątkowych nie ma bezpośredniego prostego mechanizmu zgłoszenia zaistniałej sytuacji, ponieważ konstruktor nie przekazuje żadnego typu i wartości, która mogłaby przekazać informacje o zaistniałym błędzie. Oczywiście można obejść ten problem poprzez zastosowanie dodatkowej zmiennej lokalnej do [...]
czytaj całość »
24 września 2008
Kategorie: programowanie | Tagi: C++, code, debug, eksperymenty
komentarze: 0
Potrzebowałem w prosty sposób i łatwy sposób logować moment tworzenia i niszczenia obiektów. W najprostszym wypadku wystarczyłoby przeciążyć operator new i delete, ale wtedy logowanie dotyczyłoby tylko obiektów tworzonych na stercie. A ja chce i stos, i stertę ;) No to wystarczy w konstruktorze i destruktorze umieścić wywołanie funkcji logującej i problem znika. Tylko, że [...]
czytaj całość »
10 września 2008
Kategorie: programowanie | Tagi: boost, C++, code, predicate, STL
komentarze: 4
Nieraz zdarza się, ze przechowujemy w kontenerach STL-owych niebanalne obiekty, czy typy nieco bardziej rozbudowane od typów wbudowanych. Załóżmy, że mamy prosty vector wypełniony prostymi obiektami o budowie zbliżonej do następującej struktury: struct MyObj{ int foo; int bar; std::string name; }; I chcielibyśmy wyszukać w nim element o nazwie „foo”. Oczywiście najprostszym i najszybszym rozwiązaniem [...]
czytaj całość »
1 września 2008
Kategorie: programowanie | Tagi: C++, code, namespace
komentarze: 2
Nie wszyscy pewnie mają świadomość, że w C++ istnieje możliwość definiowania aliasów dla przestrzeni nazw. Coś jak typedef dla namespace ;) Mechanizm ten pozwala na przypisanie innej nazwy dla istniejącej już przestrzeni nazw. Szczególnie użyteczne przy długich nazwach, gdzie pozwala unikać ciągłego wpisywania tych nazw: namespace my_long_namespace_name { int i; } [...]
czytaj całość »