What's the boost way to create a functor that binds out an argument

Posted by Mordachai on Stack Overflow See other posts from Stack Overflow or by Mordachai
Published on 2010-03-19T19:31:36Z Indexed on 2010/03/19 19:41 UTC
Read the original article Hit count: 300

Filed under:
|
|

I have need for a function pointer that takes two arguments and returns a string.

I would like to pass an adapter that wraps a function that takes one argument, and returns the string (i.e. discard one of the arguments).

I can trivially build my own adapter, that takes the 2 arguments, calls the wrapped function passing just the one argument through.

But I'd much rather have a simple way to create an adapter on the fly, if there is an easy way to do so in C++/boost?

Here's some details to make this a bit more concrete:

typedef boost::function<CString (int,int)> TooltipTextFn;

class MyCtrl
{
public:
    MyCtrl(TooltipTextFn callback = boost::bind(&MyCtrl::GetCellText, this, _1, _2)) : m_callback(callback) { }

    // QUESTION: how to trivially wrapper GetRowText to conform to TooltipTextFn by just discarding _2 ?!
    void UseRowText() { m_callback = boost::bind(&MyCtrl::GetRowText, this, _1, ??); }

private:

    CString GetCellText(int row, int column);
    CString GetRowText(int row);

    TooltipTextFn   m_callback;
}

Obviously, I can supply a member that adapts GetRowText to take two arguments and only passes the first to GetRowText() itself.

But is there already a boost binder / adapter that lets me do that?

© Stack Overflow or respective owner

Related posts about c++

Related posts about boost