IMHO эта и аналогичные ей перегрузки (для других операторов и других количеств параметров) должны бы определяться в Boost.Function, это ее дело, не мое как пользователя.
Re[3]: [Boost.Bind] Как вернуть результат of bind?
Здравствуйте, igna, Вы писали:
I>IMHO эта и аналогичные ей перегрузки (для других операторов и других количеств параметров) должны бы определяться в Boost.Function, это ее дело, не мое как пользователя.
Сейчас у такого кода имеется такая же семантика, как с указателями на функции:
boost::function<R(P)> a, b;
if (a || b)
{
...
}
При переопределении || смысл уже неочевиден.
Кроме того, неясно, насколько лениво в f = (a || b); f() делать проверку b на NULL — кидать сразу, при попытке вызова f() или только если a вернула false.
Русский военный корабль идёт ко дну!
Re[4]: [Boost.Bind] Как вернуть результат of bind?
Здравствуйте, Alexander G, Вы писали:
AG>Кроме того, неясно, насколько лениво в f = (a || b); f() делать проверку b на NULL — кидать сразу, при попытке вызова f() или только если a вернула false.
Нинасколько не лениво, так же как и в случае перегрузки, которую определяют Boost.Bind и Boost.Lambda. Ленивый operator|| определить нельзя.
Re[5]: [Boost.Bind] Как вернуть результат of bind?
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Alexander G, Вы писали:
AG>>Кроме того, неясно, насколько лениво в f = (a || b); f() делать проверку b на NULL — кидать сразу, при попытке вызова f() или только если a вернула false.
I>Нинасколько не лениво, так же как и в случае перегрузки, которую определяют Boost.Bind и Boost.Lambda. Ленивый operator|| определить нельзя.
Если оставить без дополнительной проверки, то будет "лениво", в смысле
bool x() { ... }
...
boost::function<bool()> a = x;
boost::function<bool()> b = 0;
boost::function<bool()> p = a || b; // не кидает
boost::function<bool()> r = b || a; // не кидаетif (p) // true
{
p(); // кидает, если x возвращает false
}
if (r) // true
{
r(); // всегда кидает
}
Русский военный корабль идёт ко дну!
Re[4]: [Boost.Bind] Как вернуть результат of bind?
А ещё, может реализовать только нужные операторы и оптимально, переписав внутренний бинд в то, что, что он реализует? Взять Boost.Proto и сделать expression template?
Русский военный корабль идёт ко дну!
Re[5]: [Boost.Bind] Как вернуть результат of bind?
Здравствуйте, Alexander G, Вы писали:
AG>Может, наследника от boost::function?
Разумно, только в моем случае лучше уж пусть та самая возвращающая function функция (которую я сам пишу), возвращает op_function, тогда не нужен будет make_op в выражении.