find_if boost_bind
От: carpenter Голландия  
Дата: 05.05.08 12:08
Оценка:
i_device_class имеет тип bstr_t

Хочеться изобразить чтото вроде вот этого —

bstr_t bs(tstr);
if(CClass::m_dtypes.end()!=find_if(CClass::m_dtypes.begin(),CClass::m_dtypes.end(),
wcsstr(bs.GetBSTR(),(boost::bind(&CDeviceInfo::i_device_class,_1)).GetBSTR())) == 0 ))

не прибегая к написанию предиктата или функтора или цикла ...
я например другого решения не вижу — но вдруг есть чтото изящное
ясен перец что этот пример не скомпиляеться — но вроде как идея ясна
Весь мир — Кремль, а люди в нем — агенты
Re: find_if boost_bind
От: carpenter Голландия  
Дата: 05.05.08 12:12
Оценка:
Здравствуйте, carpenter, Вы писали:
извините за предыдущее оформление

i_device_class имеет тип bstr_t

Хочеться изобразить чтото вроде вот этого —


bstr_t bs(tstr);
    if(CClass::m_dtypes.end()!=find_if(CClass::m_dtypes.begin(),CClass::m_dtypes.end(),
        wcsstr(bs.GetBSTR(),(boost::bind(&CDeviceInfo::i_device_class,_1)).GetBSTR())) == 0 ))


не прибегая к написанию предиктата или функтора или цикла ...
я например другого решения не вижу — но вдруг есть чтото изящное
ясен перец что этот пример не скомпиляеться — но вроде как идея ясна
Весь мир — Кремль, а люди в нем — агенты
Re[2]: find_if boost_bind
От: Аноним  
Дата: 05.05.08 12:59
Оценка:
Здравствуйте, carpenter, Вы писали:

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

C>извините за предыдущее оформление

C>i_device_class имеет тип bstr_t


C>Хочеться изобразить чтото вроде вот этого -



C>
C>bstr_t bs(tstr);
C>    if(CClass::m_dtypes.end()!=find_if(CClass::m_dtypes.begin(),CClass::m_dtypes.end(),
C>        wcsstr(bs.GetBSTR(),(boost::bind(&CDeviceInfo::i_device_class,_1)).GetBSTR())) == 0 ))

C>


C>не прибегая к написанию предиктата или функтора или цикла ...

C>я например другого решения не вижу — но вдруг есть чтото изящное
C>ясен перец что этот пример не скомпиляеться — но вроде как идея ясна

Нужен вложенный бинд, прийдётся забиндить второй GetBSTR и wcsstr. Сравнение с нулём в последних версиях буста прокатит и без бинда ( bind(...) == 0 работает), хотя можно и тут забиндить std::equal
Re[2]: find_if boost_bind
От: Кодт Россия  
Дата: 05.05.08 13:26
Оценка: 2 (1)
Здравствуйте, carpenter, Вы писали:

C>Хочеться изобразить чтото вроде вот этого -

C>
C>bstr_t bs(tstr);
C>    if(CClass::m_dtypes.end()!=find_if(CClass::m_dtypes.begin(),CClass::m_dtypes.end(),
C>        wcsstr(bs.GetBSTR(),(boost::bind(&CDeviceInfo::i_device_class,_1)).GetBSTR())) == 0 ))

C>


if(
    std::find_if
    (
        the_begin, the_end,
        // wcsstr( bs.GetBSTR(), _1.i_device_class.GetBSTR() ) == 0
        boost::bind
        (
            wcsstr,
            bs.GetBSTR(),
            boost::bind
            (
                &bstr_t::GetBSTR,
                boost::bind
                (
                    &CDeviceInfo::i_device_class,
                    _1
                )
            )
        )
        == 0
    )
    != the_end
)
    .....

Казалось бы, вот.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[3]: find_if boost_bind
От: carpenter Голландия  
Дата: 05.05.08 14:14
Оценка:
Здравствуйте, Кодт, Вы писали:


boost::bind
            (
                &bstr_t::GetBSTR,


Вот до этого сам недотумкал (ну в смысле забиндить GetBSTR), хотя чуял что решение есть ... спс

Хотя так вот получается короче (да и понятнее) —


 BOOST_FOREACH(CDeviceInfo & c,CClass::m_dtypes)
    {
        if(wcsstr(bs.GetBSTR(),c.i_device_class.GetBSTR()))


лучшее враг хорошего
Весь мир — Кремль, а люди в нем — агенты
Re[4]: find_if boost_bind
От: jazzer Россия Skype: enerjazzer
Дата: 05.05.08 17:51
Оценка: :)
Здравствуйте, carpenter, Вы писали:

C>
C>[b]boost::bind


C>
C> BOOST_FOREACH(CDeviceInfo & c,CClass::m_dtypes)


C> лучшее враг хорошего


и кто здесь в роли лучшего/хорошего?

Это я к тому, что твоя фраза звучит как "крестовая отвертка — враг плоской"
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.