boost:bind разная сигнатура
От: ZiloT  
Дата: 13.02.08 07:15
Оценка:
Допустим есть некий функциональный объект:


template <class item_type, class _Pred>
class Filler : public std::unary_function<const item_type*, void>
{
public:

        Filler(_Pred _pred)
        : m_Pred(_pred)
    {}

    void operator()(const item_type* pObj) const
    {
        CString sName;

        m_Pred(sName);
                
                // bla-bla
    }

protected:

    _Pred& m_Pred;
};


И его использование:



typedef boost::function<void (CString&)> TFunc;

std::for_each(objs.begin(), objs.end(), Filler<Object, TFunc>(boost::bind(&Object::GetFullName, _1, boost::ref(_2), (int*)NULL)));


В "objs" сидят Object* .

Хочется как-нить пропихнуть в качестве предиката в Filler функцию Object::GetFullName
Проблема в том, что GetFullName имеет несколько отличную сигнатуру, а именно

bool Object::GetFullName(CString& buf, int* pValue = NULL) const {}


Как сие провернуть, господа?
Re: boost:bind разная сигнатура
От: bnk СССР http://unmanagedvisio.com/
Дата: 13.02.08 07:26
Оценка:
Здравствуйте, ZiloT, Вы писали:

ZT>Как сие провернуть, господа?


IMHO если вам с практической точки зрения, то приерно вот так
for (Objects::iterator it = objs.begin(); it != objs.end(); ++it)
{
  // bla-bla
}

А если с теоретической, то вам наверное в форум "C++"
Re: boost:bind разная сигнатура
От: remark Россия http://www.1024cores.net/
Дата: 13.02.08 07:34
Оценка:
Здравствуйте, ZiloT, Вы писали:

ZT>Допустим есть некий функциональный объект:

ZT>Как сие провернуть, господа?

http://gzip.rsdn.ru/Forum/message/2679578.1.aspx
Автор: remark
Дата: 03.10.07



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.