fastformat char & wchar_t
От: Аноним  
Дата: 16.05.09 12:07
Оценка:
Доброго времени суток.
Пытаюсь заюзать 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


Что посоветуете?
fastformat
Re: fastformat char & wchar_t
От: VoidEx  
Дата: 16.05.09 17:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Что посоветуете?



#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);
Re[2]: fastformat char & wchar_t
От: Аноним  
Дата: 16.05.09 18:31
Оценка:
Здравствуйте, 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 );
}
fastformat
Re[3]: fastformat char & wchar_t
От: VoidEx  
Дата: 17.05.09 04:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня проблема не в выборе типа строки, проблема в использовании 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

Можно вынести нужную функциональность в отдельные либы, одну уникодную, вторую нет, и использовать функции оттуда.
Re[4]: fastformat char & wchar_t
От: K13 http://akvis.com
Дата: 18.05.09 07:02
Оценка:
VE>Т.е. вы хотите использовать fastformat и с тем, и с другим одновременно?
VE>Тогда можно попробовать инклудить fastformat два раза в разных namespace, при этом во втором случае #undef UNICODE.

а смысл? Если не получится склеить wstring и string в одном сообщении?
в принципе он и сейчас может создавать wstring из string и совать его в fastformat
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.