Showing posts with label boost. Show all posts
Showing posts with label boost. Show all posts

Sunday, September 19, 2010

CrystaX's Android NDK

Как известно, спустя некоторое время после выхода Android SDK, Google выпустил Android NDK. Это такой тулкит, позволяющий писать для андроида нативный код на C/C++. О UI речь конечно же не идёт, речь идёт о задачах, жадных до процессора. Так вот, при всей своей замечательности, у Android NDK есть ряд недостатков. Как минимум, это отсутствие поддержки RTTI и исключений. Нет исключений - нет STL. Нет STL - нет boost.

Есть такой замечательный проект по переделке Android NDK:
http://www.crystax.net/android/ndk-r4.php

Дмитрий сделал поддержку RTTI, исключений и стандартной библиотеки. Сегодня у меня наконец-то дошли руки пощупать это чудо. Оно действительно работает! Удалось даже частично поюзать boost (в маленьком объёме) - только shared_ptr, но оно работает и по-моему это очень круто.

В письменном виде сказал Дмитрию спасибо. Потому что Дмитрий реально крут и делает реально крутую вещь.

Tuesday, September 14, 2010

MPL

Открыл для себя сегодня boost MPL. От половины велосипедов теперь смело можно избавиться.

Возникла задача - реализовать простой "паттерн" (не в глобальном смысле, а в смысле идиомы для одного отдельно взятого проекта), который бы позволил ограничивать аргумент отдельно взятой функции некоторым набором заранее известных типов. С помощью буста решилось вот так:

#include <boost/mpl/list.hpp>
#include <boost/mpl/contains.hpp>
#include <boost/utility/enable_if.hpp>

struct A {};
struct B {};
struct C {};

struct D {
typedef boost::mpl::list<A, B> good_types;

template<class T>
void func(
T const& x,
typename boost::enable_if<
typename boost::mpl::contains<good_types, T>::type
>::type* dummy = 0) {
}
};

int main() {
D d;
d.func(A());
d.func(B());
d.func(C()); // тут ошибка компиляции - можно только A и B

return 0;
}

Без буста, очевидно, строчек на 100 больше было бы.

Tuesday, August 31, 2010

SQL в C++

Недавно упомянул "реализацию" SQL в C++. Сегодня случайным образом наткнулся на Boost.RDB. Естественно, в настоящем boost её пока нет. Также, случайно наткнулся вот на такой список, первый раз его вижу. Удивлён.