Как известно, спустя некоторое время после выхода 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, но оно работает и по-моему это очень круто.
В письменном виде сказал Дмитрию спасибо. Потому что Дмитрий реально крут и делает реально крутую вещь.
Showing posts with label boost. Show all posts
Showing posts with label boost. Show all posts
Sunday, September 19, 2010
Tuesday, September 14, 2010
MPL
Открыл для себя сегодня boost MPL. От половины велосипедов теперь смело можно избавиться.
Возникла задача - реализовать простой "паттерн" (не в глобальном смысле, а в смысле идиомы для одного отдельно взятого проекта), который бы позволил ограничивать аргумент отдельно взятой функции некоторым набором заранее известных типов. С помощью буста решилось вот так:
Без буста, очевидно, строчек на 100 больше было бы.
Возникла задача - реализовать простой "паттерн" (не в глобальном смысле, а в смысле идиомы для одного отдельно взятого проекта), который бы позволил ограничивать аргумент отдельно взятой функции некоторым набором заранее известных типов. С помощью буста решилось вот так:
#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
Subscribe to:
Posts (Atom)