Вчера попался на глаза анонс второй версии платформы Tizen (очередная многострадальная попытка затащить Linux на мобилки после LiMo, MeeGo и др.). Похоже, там есть всего два "родных" подхода к разработке мобильных приложений: HTML5 и C++ (т.н. Native SDK).
Вот как раз с C++ной составляющей поржал. В анонсе говорится (выделение жирным мое):
Tizen is an open source, standards-based software platform supported by leading mobile operators, device manufacturers, and chip suppliers for multiple device categories, including smartphones, tablets, netbooks, in-vehicle infotainment devices, and smart TVs.
Т.е. базирующееся на стандартах. Интересно, на каких, если Native SDK содержит, к примеру, собственный вариант HashMap. Причем какой! Любо-дорого посмотреть на пример его использования:
#include <FBase.h>
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
void
MyClass::HashMapSample(void)
{
HashMap map(SingleObjectDeleter);
// Constructs a %HashMap instance with default capacity, load factor, hash code provider, and comparer
map.Construct();
map.Add(new String(L"Zero"), new Integer(0)); // map.GetCount() : 1, map : (Zero -> 0)
map.Add(new String(L"One"), new Integer(1)); // map.GetCount() : 2, map : (Zero -> 0), (one -> 1)
map.Add(new String(L"Two"), new Integer(2)); // map.GetCount() : 3, map : (Zero -> 0), (one -> 1), (Two -> 2)
// Gets a value with the specified key
Integer* pValue = static_cast< Integer* > (map.GetValue(String(L"Zero"))); // pValue : 0
// Removes the value with the specified key
map.Remove(String(L"Zero")); // map.GetCount() : 2, map : (one -> 1), (Two -> 2)
// Uses an enumerator to access elements in the list
IMapEnumerator* pMapEnum = map.GetMapEnumeratorN();
String* pKey = null;
while (pMapEnum->MoveNext() == E_SUCCESS)
{
pKey = static_cast< String* > (pMapEnum->GetKey());
pValue = static_cast< Integer* > (pMapEnum->GetValue());
}
delete pMapEnum;
// Deallocates all objects
// Because the destructor calls RemoveAll() internally, you don't need to call RemoveAll() to destroy all elements at the end.
map.RemoveAll();
}
По мне так просто тихий ужас и кошмар. Яркий пример того, как не нужно программировать на C++, по крайней мере со времен C++98. Не говоря уже про C++11.