Re[2]: Execution guard
От: denisko http://sdeniskos.blogspot.com/
Дата: 11.11.09 17:00
Оценка:
Здравствуйте, zaufi, Вы писали:

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


D>>Народ а есть где нибудь в недрах буста (или не буста) класс, который принимает на вход класс и если выполнены некоторые условия, вызывает у него определенную функцию. Самому написать не проблема, но лень.

D>>З.ы. не поверите в гугле таки забанили.

Z>ты слишком специализированные вопросы задаешь... суда по оценкам народ просто растерялся не найдя что ответить %)

Да просто все, у нас есть товарищь, который ОООЧЕНЬ любит писать так
 bool func(arg1,arg2....argN)
{
 if(isValid(arg1) && isValid(arg2) && ..........)
 {
   if(andNobodyWantsToThrowSomeShit(member1,memer2,member3))
   {
      if(bullShitCondition1(..))
      {
         if(bullShitCondition2(...))
         {
            if(!bullShitConditionN(...))
            {
               throw wowIfuckedYourGuidelinesException;
            }
            else
            {
               return arg1 != arg2
            }
         }
      }
   }
   return false;
 }

и гордится этим.
1) По ряду причин, мы не используем исключения (слишком много наследного кода, причем шаблонного, который не поддерживает исключения).


Хочется иметь что-нибудь типа такой структуры
struct ProxyCall
{
   template<typename CallerClass, typename CallerFunc, typename agr1.....typename argN>
   ProxyCall(CallerFunc, CallerClass* caller):
   m_caller(caller)
   {
      
   }
   bool operator()(arg1,arg2...argN)
   {
      if(isValid(m_caller) && m_caller->testMyArgs(arg1....argN))
      {
       return SAFE_CALL(CallerFunc,CallerClass,arg1,arg2,argN);
      }
      return false;
   }
};

где SAFE_CALL -- ловит все разумные исключения товарища, пишет в лог и выставляет код ошибки. Как писать понятно, но писать нудно -- надо кучу операторов скобочка для каждого аргумента, да и наверняка это где то реализовано, вот такую реализацию я и ищу.
<Подпись удалена модератором>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.