Здравствуйте, ArtDenis, Вы писали:
AD>Во первых, переделаем in_range:
AD>AD>template <class T>
AD>bool in_range (const T& _min, const T& _max, const T& val )
AD>{
AD> return ( val >= _min && val <= _max);
AD>}
AD>
Было бы наверно лучше описать "in less<> terms". Хотя ладно... это не главное.
AD>Теперь при помощи буста твоя задача решаема:
AD>AD> for_each_if
AD> (
AD> sequence.begin(),
AD> sequence.end(),
AD> boost::mem_fn(&Foo::generator),
AD> boost::bind
AD> (
AD> in_range<bar>,
AD> boost::bind(&Foo::mf, _1, 1),
AD> boost::bind(&Foo::mf, _1, 2),
AD> 10 // а для какого числа будем искать вхождение в диапазон? Я заменил его на 10
AD> )
AD> );
AD>
AD>Правда, в задаче не понятно, какое число нужно передать в in_range для выяснения, входит ли оно в диапазон.
Да, блин, сорри... писал в попыхах... опечатался...На самом деле надо вот как:
min и мах — это как раз подставляемые значения.. а для выяснения, входит ли в диапазон — это как раз должно быть значение возвращаемое Foo::mf. Т.е. как я понял должно быть вот так:
for_each_if
(
sequence.begin(),
sequence.end(),
boost::mem_fn(&Foo::generator),
boost::bind
(
in_range<bar>,
min, // тут всё
max, // ясно
boost::bind(&Foo::mf, _1, value_passed_to_Foo_mf_function) // что собсна проверяем, входит ли в диапазон
)
);
Значит теперь усложним задачу. Получилось так, что надо предварительно надо перед сравнением переделать. Допустим есть функция (может быть как и член Foo, так и некая static).
baz barTobaz(bar);
Те меня интересует можно ли будет написать что-то вроде:
for_each_if
(
sequence.begin(),
sequence.end(),
boost::mem_fn(&Foo::generator),
boost::bind
(
in_range<baz>,
min_baz, // тут всё
max_baz, // ясно
boost::bind(
ptr_fn(barTobaz), // не уверен что в booste'е именно так
_1,
boost::bind(&Foo::mf, _1, value_passed_to_Foo_mf_function) // что собсна проверяем, входит ли в диапазон
)
)
);
С boost'ом я не очень знаком... Но решение конечно достаточно простое... Спасибо ArtDenis'у.
Но хотелось бы всё-таки уложиться в рамки стандарта STL.
Спасибо.... ждём-с ответа.
... << RSDN@Home 1.1.3 beta 1 >>