Здравствуйте, 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 -- ловит все разумные исключения товарища, пишет в лог и выставляет код ошибки. Как писать понятно, но писать нудно -- надо кучу операторов скобочка для каждого аргумента, да и наверняка это где то реализовано, вот такую реализацию я и ищу.