Re[4]: Я индус?
От: Alexey Chen Чили  
Дата: 16.02.06 19:02
Оценка:
Init64 пишет:
>
> CLog::Inst().Message(Notice) << "test" << endmsg();
>

>
> Теперь осталось избавиться от endmsg().

Есть ещё совершенно альтернативный вариант который я пользую.

Lout << _S*"application version %?" %GetVersion();
Ldbg << _S*"opps, it isn't good";
Lerr << _S*"API returned error %08x in %?:%d" %hr %__FILE__ %__LINE__;


Lout, Ldbg и Lerr енумы. _S*"fmt" — формат. %val аргументы для форматера.
Оператор вывода форматирует сообщение на стек (при необходимости дёргает хип)
и зовёт синхронизированный метод печати в лог.

template < class tTchr >
   void operator << ( Lout_, FormatT<tTchr> const &fmt)
     {
       StringT<tTchr,128> localbuffer;
       Logwrite( LOG_OUT_CATEGORY, fmt.Write( localbuffer ) );
     }


Собственно многопоточность тут может аффектится только выделением на хипе, которое
происходит в случае нехватки места в localbuffer, изначально распределённом на стеке.
Posted via RSDN NNTP Server 2.0
Re[2]: Я индус?
От: gid_vvp  
Дата: 17.02.06 08:31
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Например, с помощью глаголов.


Ш>
Ш>enum LogType { Log }; // Это приём я называю глаголом.

Ш>template <class T>
Ш>logger & operator << (LogType,const T &x) { return singleton<logger>::instance() << x ; }

Ш>...

Ш>Log << "Log message" << endl ;
Ш>


А вот как бы организовть нечто такое для всёх других одиночек (не лога) чтобы избавится от синтаксического оверхеда?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Я индус?
От: megawatt Россия http://ruby.inuse.ru
Дата: 17.02.06 08:57
Оценка:
Здравствуйте, srggal, Вы писали:

S>Это Вы говорите о Локализации ?


Вот именно

S>Каких сообщений, из какого файла ?


Да все вы поняли Наши заказчики давольно часто хотят переписать
пару тройку сообщений так как им захочется, вот и требуется
им механизм загрузки из файла.
Re[3]: Я индус?
От: Шахтер Интернет  
Дата: 17.02.06 09:01
Оценка: 6 (1)
Здравствуйте, Аноним, Вы писали:

Ш>>Например, с помощью глаголов.


Ш>>
Ш>>enum LogType { Log }; // Это приём я называю глаголом.
Ш>>template <class T>
Ш>>logger & operator << (LogType,const T &x) { return singleton<logger>::instance() << x ; }

Ш>>...

Ш>>Log << "Log message" << endl ;
Ш>>


А>Что-то этого я не догнал. Если можно, объясните.


Не совсем понятно, что непонятно. Мы вводим новый тип-enum. Для объектов этого типа мы можем перегрузить операторы, в данном случае -- оператор сдвига.
В самомом enum е определяем единственный енумератор, даём ему выразительное имя.

А>ЗЫ. Если это называется "индус", тогда я (который перед каждым объявлением ostringstream-а не ленится std:: приписывать), наверное, китаец...


Может быть. Они очень усидчивые.

Я обычно делаю так.
Допустим, у меня есть некоторая библиотека. Код библиотеки заключаем в пространство имен MyCoolLib.

В приложении, которое использует эту библиотеку, код заключаем в пространство имен
MyCoolApp.

А дальше делаем так.

namespace MyCoolApp {

using MyCoolLib;

}

Вообще, есть две школы применения пространств имен.
Первая -- "стандартная".

std::endl , std::vector -- здесь std -- органическая часть имени.

При этом имя пространства имен краткое и невыразительное, имена сущностей внутри -- тоже краткие и невыразительные. Фактически, имя пространства имен здесь -- общий префикс группы имен.

Вторая школа, которая мне больше нравится. Имя пространства имен -- большое и выразительное, имена внутри -- тоже большие и выразительные. Используем using. В случае конфликта имен из разных библиотек его можно разрешить явной квалификацией. Но на самомо деле, вероятность такого конфликта не велика, если используемые библиотеки тематические, а не универсальные.
Например -- библиотека длинной арифметики, или библиотека крипоалгоритмом и.т.д.

К сожалению, тут есть одна проблема. using -- транзитивная директива (на мой взгляд, это ошибочное решение). При этом если две тематические библиотеки используют две инфраструктурные библиотеки с пересекающимися пространствами имен, возникает конфликт.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[8]: Я индус?
От: srggal Украина  
Дата: 17.02.06 09:10
Оценка:
Здравствуйте, megawatt, Вы писали:

M>Здравствуйте, srggal, Вы писали:


S>>Это Вы говорите о Локализации ?


M>Вот именно


S>>Каких сообщений, из какого файла ?


M>Да все вы поняли Наши заказчики давольно часто хотят переписать

M>пару тройку сообщений так как им захочется, вот и требуется
M>им механизм загрузки из файла.

ИМХО, Локализация — отдельная песня и клогу относится в той же степени как и к остальному приложению
Вот олдин из вариантов — gettext.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[2]: Я индус?
От: Шахтер Интернет  
Дата: 17.02.06 09:14
Оценка: +1
Здравствуйте, odisseyLM, Вы писали:

LM>Всем привет, Сори за флейм


LM>Шахтер молодец, srggal — тоже ничо

LM>А по поводу навороченных логов (srggal, и др) есть уже готовые решения, зачем постоянно свой велосипед изобретать (например, log4cxx, etc).

Требования к логгированию могут быть очень разные. Как по функциональности, так и по быстродействию.
Например. В одном из последних своих проектов я сделал библиотеку логгирования, которая работала очень быстро за счет того, что форматирование сообщения откладывалось (на момент вычитки лога). Когда у тебя бюджет 100 микросекунд, пользоваться никакими стандартными средствами написанными "для всех" просто невозможно.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[9]: Я индус?
От: megawatt Россия http://ruby.inuse.ru
Дата: 17.02.06 09:27
Оценка:
Здравствуйте, srggal, Вы писали:

S>ИМХО, Локализация — отдельная песня и клогу относится в той же степени как и к остальному приложению


Давольно часто бывает что все что видит пользователь в процессе работы программы это именно лог сообщения,
так что я не могу разделить вашу точку зрения на этот счет. Если в логере нет такой возможности ( подгрузить
текст сообщений из файла ) то толку от него скорее все мало.

S>Вот олдин из вариантов — gettext.


к сожалению GPL
Re[8]: Я индус?
От: Константин Ленин Франция  
Дата: 17.02.06 09:29
Оценка:
Здравствуйте, megawatt, Вы писали:

M>Здравствуйте, srggal, Вы писали:


S>>Это Вы говорите о Локализации ?


M>Вот именно


S>>Каких сообщений, из какого файла ?


M>Да все вы поняли Наши заказчики давольно часто хотят переписать

M>пару тройку сообщений так как им захочется, вот и требуется
M>им механизм загрузки из файла.

WINAPI: ReportEvent

Иногда может пригодиться
Re[10]: Я индус?
От: Cyberax Марс  
Дата: 17.02.06 09:30
Оценка:
megawatt wrote:
> S>Вот олдин из вариантов — gettext <http://www.gnu.org/software/gettext/&gt;.
> к сожалению GPL
Нет. Там под GPL только сами утилиты — runtime-библиотека под LGPL.

В общем, можно использовать в коммерческом софте без проблем.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[9]: Я индус?
От: megawatt Россия http://ruby.inuse.ru
Дата: 17.02.06 09:36
Оценка:
Здравствуйте, Константин Ленин, Вы писали:

КЛ>WINAPI: ReportEvent

КЛ>Иногда может пригодиться

Практически никогда, мало кто из наших заказчиков использует windows,
восновном предпочтения отдаются HP, Solaris.
Re[2]: Я индус?
От: Alexeib Япония  
Дата: 17.02.06 09:51
Оценка:
Здравствуйте, Шахтер, Вы писали:


Ш>А по поводу индусов -- все индусы, просто в разной степени.



Ne znal, chto Stroustrup i izhe s nim indusi
Re[3]: Я индус?
От: Шахтер Интернет  
Дата: 17.02.06 11:55
Оценка: 11 (2)
Здравствуйте, gid_vvp, Вы писали:

_>А вот как бы организовть нечто такое для всёх других одиночек (не лога) чтобы избавится от синтаксического оверхеда?


Посмотри здесь
Автор: Шахтер
Дата: 16.07.05
.

Можно определить специальный класс с перегруженным оператором ->.

class Service : NoCopy
 {
   typedef MegaRulezCompany::MegaLib::Version2006::CoolSuperPupperComponent ServerType;

   typedef MicroWareSoftCompany::SuperDumbAndDumberLib::Version2006::Build666::ImplementFactoryTemplate

           FactoryTemplate;

   typedef FactoryTemplate<ServerType> Factory;

   static ServerType * LockServer() 
    { 
     Factory::Lock(); 
    }

   static void ReleaseServer(ServerType *server) 
    {
     Factory::Release(server); 
    }

   ServerType *server;

  public:

   Service() { server=LockServer(); }

   ~Service() { ReleaseServer(server); }

   ServerType * operator -> () const { return server; }
 }; 

...

Service()->method();
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[10]: Я индус?
От: Константин Ленин Франция  
Дата: 17.02.06 12:04
Оценка:
Здравствуйте, megawatt, Вы писали:

M>Здравствуйте, Константин Ленин, Вы писали:


КЛ>>WINAPI: ReportEvent

КЛ>>Иногда может пригодиться

M> Практически никогда, мало кто из наших заказчиков использует windows,

M> восновном предпочтения отдаются HP, Solaris.

Ну вы ОС не уточняли, да я и не претендую...
Re[3]: Я индус?
От: Chiрset Россия http://merlinko.com
Дата: 17.02.06 16:06
Оценка:
Здравствуйте, Alexeib, Вы писали:

A>Здравствуйте, Шахтер, Вы писали:



Ш>>А по поводу индусов -- все индусы, просто в разной степени.



A>Ne znal, chto Stroustrup i izhe s nim indusi


Индусы, индусы
"Всё что не убивает нас, делает нас сильнее..."
Re[4]: Я индус?
От: megawatt Россия http://ruby.inuse.ru
Дата: 17.02.06 16:35
Оценка:
Здравствуйте, Chiрset, Вы писали:

C>Здравствуйте, Alexeib, Вы писали:


A>>Здравствуйте, Шахтер, Вы писали:



Ш>>>А по поводу индусов -- все индусы, просто в разной степени.



A>>Ne znal, chto Stroustrup i izhe s nim indusi


C>Индусы, индусы


Есть еще такой термин как — дешевые программисты, но к ниму я уверен он уж точно не относится
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.