Доброго времени суток.
Пытаюсь заюзать
fastformat. Столкнулся с проблемой — нельзя смешивать char и wchar_t, например, если проект UNICODE, то использовать char и std::string вообще не удаётся:
namespace ff = fastformat;
std::string msg;
ff::fmt( msg, "Hello, {0}!!{1}{1}", "World", 1 ); // fail
std::wstring wmsg;
ff::fmt( wmsg, L"Hello, {0}!!{1}{1}", L"World", 1 ); // ok
Что посоветуете?
Здравствуйте, Аноним, Вы писали:
А>Что посоветуете?
#include <tchar.h>
namespace std {
typedef std::basic_string<TCHAR> tstring;
}
std::tstring tmsg;
ff::fmt(tmsg, _T("Hello, {0}!{1}{1}"), _T("World"), 1);
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, Аноним, Вы писали:
А>>Что посоветуете?
VE>VE>#include <tchar.h>
VE>namespace std {
VE> typedef std::basic_string<TCHAR> tstring;
VE>}
VE>std::tstring tmsg;
VE>ff::fmt(tmsg, _T("Hello, {0}!{1}{1}"), _T("World"), 1);
VE>
У меня проблема не в выборе типа строки, проблема в использовании std::string и std::wstring в одной и той же проге с fastformat.
Если проект юникодный, то fastformat может выводить только в std::wstring.
Например:
std::wstring text;
// unicode
ff::fmt( text, L"Hello, {0}!", "World" );
int er = f( text );
if( er < 0 )
{
std::string msg;
// multi-byte
ff::fmt( msg, __FUNCTION__ " has fail with error #{1}", er ); // ошибка компиляции
throw std::runtime_error( msg );
}
Здравствуйте, Аноним, Вы писали:
А>У меня проблема не в выборе типа строки, проблема в использовании std::string и std::wstring в одной и той же проге с fastformat.
А>Если проект юникодный, то fastformat может выводить только в std::wstring.
Т.е. вы хотите использовать fastformat и с тем, и с другим одновременно?
Тогда можно попробовать инклудить fastformat два раза в разных namespace, при этом во втором случае #undef UNICODE.
namespace ufmt {
#include <fastformat>
}
#undef UNICODE
namespace afmt {
#include <fastformat>
}
#define UNICODE
Можно вынести нужную функциональность в отдельные либы, одну уникодную, вторую нет, и использовать функции оттуда.