#c #integration
#c #интеграция
Вопрос:
проблема, с которой я столкнулся, заключается в том, что для игры я хочу упомянуть, что я не очень хороший программист на c , и эта функция действительно доставляет мне головную боль. Я пытаюсь интегрировать многоязычную систему, но я застреваю в функции и не могу найти решение, старая функция выглядит так
void SendNotice(const char* c_pszBuf, bool bBigFont)
{
const DESC_MANAGER::DESC_SETamp; c_ref_set = DESC_MANAGER::instance().GetClientSet();
std::for_each(c_ref_set.begin(), c_ref_set.end(), notice_packet_func(c_pszBuf, bBigFont));
}
и новая функция должна выглядеть примерно так
#ifdef __MULTI_LANGUAGE_SYSTEM__
void SendNotice(const char* c_pszBuf, bool bBigFont, ...)
#else
void SendNotice(const char* c_pszBuf, bool bBigFont)
#endif
{
const DESC_MANAGER::DESC_SETamp; c_ref_set = DESC_MANAGER::instance().GetClientSet();
#ifdef __MULTI_LANGUAGE_SYSTEM__
if (!c_pszBuf)
return;
itertype(c_ref_set) it = c_ref_set.begin();
while (it != c_ref_set.end())
{
LPDESC d = *(it );
if (d->GetCharacter())
{
const char* c_szLocaleFormat = LC_LOCALE_TEXT(c_pszBuf, d->GetLanguage());
char szChatBuf[CHAT_MAX_LEN 1];
va_list args;
va_start(args, c_pszBuf);
int len = vsnprintf(szChatBuf, sizeof(szChatBuf), c_szLocaleFormat, args);
va_end(args);
d->GetCharacter()->ChatPacket(CHAT_TYPE_NOTICE, "%s", szChatBuf);
}
}
#else
std::for_each(c_ref_set.begin(), c_ref_set.end(), notice_packet_func(c_pszBuf, bBigFont));
#endif
}
В новой функции я должен определить bBigFont, но я не понимаю, как, может кто-нибудь исправить функцию?
Комментарии:
1. как вы вообще ожидаете реализовать многоязычность при использовании
char
, многие языки выходят за рамки однобайтовых строк, а строка unicode не может обрабатываться как строка C с нулевым завершением? И что вы подразумеваете под «определить»? Неясно, что он должен делать.2. Я опубликовал старую функцию выше того, что я опубликовал, просто для интеграции bBigFont мне нужно заменить « std::for_each(c_ref_set.begin(), c_ref_set.end(), notice_packet_func(c_pszBuf, bBigFont )); « на « if (!c_pszBuf) return; (выможно найти всю функцию наверху) } } «