Może trochę spóźniony prezent gwiazdkowy, ale xime kompiluje się i działa bez problemu pod Linuksem.
Jedynym istniejącym problemem jest kodowanie polskich znaków, zawartych na sztywno w kodzie. Stringi w wxGTK reprezentowane są wewnętrznie w postaci UTF-8, więc mamy krzaczki przy zapisie źródła w innym kodowaniu. A jak zapiszemy w UTF-8 to znów pod Windowsem się teksty się sypią.
Problem można rozwiązać, ale wymagałoby to dodatkowego kodu. To jest nierealne w aktualnym stanie, bo de facto i tak zostanie to wszystko “zmienione” przy wprowadzeniu lokalizacji.
Coraz częściej popularne staje się podłączenie do sieci i Internetu różnych ciekawych zabawek, szczególnie tych wykonanych samodzielnie. Pomińmy kwestie przemysłu i różnych gotowych produktów służących, czy to do zdalnego monitorowania obiektów, pomiarów i przesyłania danych poprzez sieć, czy też do zdalnego sterowania. A skupmy się na bardziej amatorskich projektach.
Jak to zawsze bywa, możliwość podłączenia naszej zabawki do sieci zależy głównie od czasu i pieniędzy.
Jeszcze do niedawna musieliśmy się sami bawić w obsługę stosu sieciowego, bądź wykorzystywać dostępne stosy programowe, głównie dla małych systemów mikroprocesorowych opartych na 8-bitowych mikrokontrolerach rodziny ‘51 czy AVR.
Wzorce języka C++ spełniają wszystkie założenia maszyny Turinga. Przemyślenia i próby udowodnienia tego sformułowania można znaleźć w pracy “C++ Templates are Turing Complete” autorstwa Todda L. Veldhuizena.
Małą ciekawostkę na temat limitów we wzorcach możemy znaleźć na końcu artykułu:
[…] the C++ standards committee allows conforming compilers to limit the depth of “recursively nested template instantiations,” with a recommended minimum limit of 17. Compilers have adopted this limit, many with an option to increase it.
Moja wtyczka Gadu Radio dla komunikatora Tlen.pl “wylądowała” na płycie DVD miesięcznika CHIP.
W grudniowym numerze (12/2008) czasopisma komputerowego CHIP pojawił się artykuł o popularnych wtyczkach dla komunikatorów - “40 najbardziej poszukiwanych wtyczek do komunikatorów”. Co prawda w tekście nie opisano mojego pluginu tylko “wspomniano” o nim w “ramce”, jako że zamieszczono go na płytce dołączonej do magazynu.
O zamierzeniu publikacji pluginu na płytce wiedziałem już od dawna, bo otrzymałem zapytanie o zgodę na publikację od jednego z redaktorów.
Pisałem o numeric_limits jako zapomnianej części biblioteki numerycznej, dziś do tego “worka” mogę dorzucić iteratory strumieni jako rzadko używane “twory”. Niektórych może zdziwić ten fakt, że strumienie także posiadają iteratory, a ich wykorzystanie może bardzo nam pomoc i uprościć kod.
Na początek najlepiej zapoznać się z tym co mówi dokumentacja na temat istream_iterator i ostream_iterator z nagłówka iterator.
Często iteratory te są wykorzystywane w różnych przykładach innych algorytmów do szybkiego pobierania danych z strumienia wejściowego i wyświetlania na wyjściowym, w produkcyjnym oprogramowaniu rzadko je można spotkać.
Korzystając z wzorca numeric_limits, o którym wspomniałem w poprzedniej notce i informacjach o min/max wartości danego typu numerycznego, można w bardzo łatwy sposób stworzyć sobie bezpieczny, odporny na underflow/overflow, “operator” - wzorzec do konwersji wartości liczbowych pomiędzy poszczególnymi typami numerycznymi.
template <typename TargetType, typename SourceType> inline TargetType numeric_cast(SourceType arg) { if (arg < std::numeric_limits<TargetType>::min()) throw std::underflow_error("bad numeric cast"); if (arg > std::numeric_limits<TargetType>::max()) throw std::overflow_error("bad numeric cast"); return static_cast<TargetType>(arg); } Drugi typ argumentu wzorca można pominąć, zostanie on wydedukowany przez kompilator na podstawie typu argumentu przekazanego do funkcji, więc konstrukcja ta przyjmuje prostą postać podobną do wbudowanych operatorów rzutowania:
Standardowa biblioteka języka C++ zawiera wiele ciekawych i przydatnych narzędzi w codziennej pracy developera C++, a po wejściu w życie C++0x będzie jeszcze ciekawiej. Czasem nawet nie mamy świadomości lub zapominamy o ciekawych perełkach jakie można tam znaleźć.
Jednym z zapomnianych i chyba rzadko używanych komponentów biblioteki STL jest szablon numeric_limits będący “odłamkiem” numerycznej części biblioteki. Wzorzec ten wraz z specjalizacjami dla typów wbudowanych zdefiniowany jest w pliku nagłówkowym limits. Jego przeznaczeniem jest dostarczenie informacji o cechach typów numerycznych.
Na blogu ProccesOne można znaleźć wzmiankę o uruchomieniu pierwszej wersji nowej, ciekawej usługi - tweet.im. Jest to bramka “wiążąca” serwis twitter z Twoim ulubionym komunikatorem, oczywiście opartym na protokole XMPP ;)
Jak można dowiedzieć się ze strony projektu, dzięki usłudze można szybko i łatwo, wprost spod swojego komunikatora zarządzać całą swoją twiterową platformą microblogową:
tweet.IM is an instant messaging service that allows you to use microblogging platforms, like Twitter, simply from your instant messaging client.
Niedawno marudziłem o makrach i funkcjach ze zmienną liczbą argumentów, więc dziś do uzupełnienia tego tematu wspomnę kilka słów o wzorcach ze zmienną liczbą parametrów, czyli Variadic templates, które niebawem staną się oficjalną częścią standardu języka C++.
Modelowa, prosta funkcja wzorcowa, która jako przykład występuje prawie w każdej wzmiance na temat “nowego ficzera”.
template<typename T> void print(const T& t) { std::cout << t; } template<typename T, typename... Args> void print(const T& t, const Args&.
Czym jest iterator w STL każdy wiedzieć powinien.
Mogę wspomnieć ze jest to typ z zachowaniem podobnym do wskaźnika, który służy do poruszania się po kontenerach biblioteki standardowej, ale nie jest to wskaźnik, mimo iż w większości implementacjach jest to opakowany w obiekt wskaźnik.
Kilka flejmów na ten temat można znaleźć w usenetowych archiwach pl.comp.lang.c ;)
Konwersja (słowo tutaj zbytnio nie pasuje) iteratora wskazującego na dany element kontenera do typowego wskaźnika jest bardzo prosta.