У меня есть игра, в которой std :: wstring используется в качестве базового строкового типа в тысячах мест, а также выполняются операции с wchar_t и его функциями: wcsicmp () wcslen () vsprintf () и т. Д.
Проблема в том, что wstring не поддерживается в R5c (последний ndk на момент написания этой статьи).
Я не могу изменить код для использования std :: string из-за интернационализации, и я бы сломал игровой движок, который используется во многих играх ...
Какие варианты у меня есть?
1 - Заменить строку и строку на мои собственные классы строки
Это дало бы мне лучшую независимость от платформы, но смешно переопределять колесо.
Я уже начал с COW реализации строк. Мне нужно, чтобы он был COW, потому что я использую их в качестве ключей в hash_maps.
Это, конечно, много работы и подвержено ошибкам ... но, похоже, я могу это сделать.
2 - Попытайтесь исправить NDK, перекомпилировав STLPort с моими собственными реализациями функций широких символов строки стандартной библиотеки C (wcslen, mbstowcs ...)
Это был бы предпочтительный способ ... но я понятия не имею, как это сделать: (
Как заменить функцию (скажем, wcslen) в libstdc ++. A или libstlport_static.a? (не уверен, где они находятся: ()
И также я не уверен, какие функции мне нужно переопределить, я знаю, что wcslen не работает, поэтому я думаю, что они должны быть все ...
3 - У вас есть другая идея?
Я не могу дождаться официального исправления для этого, и мне придется пойти с опцией # 1, если я не могу понять, как это сделать # 2.
Я где-то читал, что если вы нацелились на 2.3, вы можете использовать wstrings, но я должен нацелиться на Android 2.1.
PS: Забыл сказать, что мне, конечно, нужно использовать STL, но нет RTTI, и я могу жить без исключений.
Заранее спасибо!