Кресты / Говнокод #9294 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
QString dump_str = "dump";
log4cplus::tstring tdump = (std::wstring((wchar_t*)dump_str.unicode(), dump_str.length()));
XLogger::dumper = log4cplus::Logger::getInstance(std::wstring(tdump));

Мой "шедевр"
Три преобразования подряд
Если кто подскажет как это по человечески приписать буду благодарен.

Запостил: ir4y ir4y, (Updated )

Комментарии (15) RSS

  • Крестопроблемы в чистом виде.
    Иногда невстроенность строк сильно вредит.
    Ответить
    • почему никаких проблем у меня в моем коде не возникает, когда я делаю
      mylogger.error() << "Hello" << L"World" << std::endl;
      крестопроблемы не в туалетах, а в головах
      Ответить
        • очевидно, в кютэ религия запрещает использовать потоки и реализовать фасет std::codecvt

          по теме - не понимаю, в чем проблема сделать
          XLogger::dumper = log4cplus::Logger::getInstance(dump_str. toStdWString());
          хоть я и не знаю, что означают эти все конструкции - в первый раз вижу
          Ответить
      • Не знаю, может потому что есть удобные (но руками написанные) конвертёры между всеми использованными в этой строке кода типами строк.
        Ответить
        • нет, по той простой причине, что по требованию п. 27.6.2.1 стандарта 2003 года basic_ostream обязан определить operator << как для char const *, так и для charT const *
          т.е. ты можешь спокойно писать
          std::wcout << "Hello, " << L"World!" << std::endl;

          и всё выведется как положено

          в std::cout конечно wchar_t const * выводить не следует - оно об нем само по себе ничего не знает, но если очень хочется, то можно объявить перегрузку вывода std::wstring в чаровый ostream, и в этой перегрузке уже выводить собственным образом - например, тривиальным
          std::ctype<wchar_t> const & facet = std::use_facet<std::ctype<wchar_t> >(o.getloc());
          for (std::wstring::const_iterator i = ws.begin(); i != ws.end(); ++i) 
          	o << (facet.narrow(*i, '?'));
          return o;


          исходя из вышеизложенного, не вижу абсолютно никаких проблем для того, чтобы ихний логгер работал как говносраный поток, придуманный 15 лет назад, и был способен без лишнего геморроя для программиста воспринимать как однобайтовые строки, так и многобайтовые - это уже задача потока либо однобайтовые расширять до юникода, либо наоборот
          я сам реализовывал такой логгер, ничего сложного в нем нет
          Ответить
          • Эм,
            log4cplus::Logger::getInstance возвращает экземпляр логера а не пишет лог.
            Непосредственно запись осуществляется уже через стандартный интерфейс потоков.
            И там все работает нормально. Проблема только в методе getInstance.
            Ответить
    • Встроенного механизма для логов с поддержкой ротации и т.п. нет =(
      Приходится использовать сторонние библиотеки
      Ответить
      • прелесть сторонних библиотек в их стороннести - хочу юзаю, хочу выкину
        Ответить
      • Перехватил вывод qDebug и делай с ним что хочешь, хоть на Луну отправляй
        Ответить
  • м)W K)K$A.N?I LD!D?F$J(K(N"M$L!H"J?L)V?Q.S.W!H:G,O"I:B"O"PR(X!RO.S.U V$O K O?E XJ!B J,G?I?QO AQ"J(Z:G(Q"R?B:I"MX)H)Z(PR,K)JA(AU?E?P:H!I)D,H?A)O(G.L?W.E I,S"P(N,I U?W!UT:YY!S R)M)T:R)T:R.F?Z?Q)W)G R,UE$D)L$R:E$T)P$U!I(U,DK"B"V"N:V,WH$I!M W J(G W)F?O,Y E,P.F!H:M M)T?L$K"J.J?Y,L?F.W"MQ.C L"UU(B.K?I"W.J$D,Y:Z(R,D)H,B?R.W.Y)L.W$O!O Z)G!N$T,P G"F(X D E.D U.IN$AK"JF!D$XB:P.B.W!G(O?A(E(O)X$M(R,TDW)G"J)Q!J"C!A$GP.R!O$H?CF D!O:R"T?L D)M.I"US!H)R)R(S,D?E:W.T$G,KP)V,B,D?O P:VC,T?Z)E V?F(S$V.L"G?C$G!B)P?Y?S!X)N:Z?L C:V?G!K I(P"OA!U(Y!O!Y"A C!C,N"C(T(T:I!B,T)P"J?A,F"PP B!F O!B)D(S!G"A,N B?O:Z,J(UJ(B,U$L,X,A!O,G(B!Q:JИRZNSQHYBODMVMGYVODATVHQLFJPQQSFXLLJIUAKELCRDVFJVMOXOOMCXQNDPCENDYMWSOEFICZFUURKYHJKJTUSGXLPVOAGBVMEXWNAOIU
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8