什么是创建一个绑定参数的仿函数的提升方式

时间:2010-03-19 19:31:36

标签: c++ boost functor

我需要一个带有两个参数并返回一个字符串的函数指针。

我想传递一个包含一个带有一个参数的函数的适配器,并返回该字符串(即丢弃其中一个参数)。

我可以简单地构建我自己的适配器,它接受2个参数,调用包装函数只传递一个参数。

但是,如果在C ++ / boost中有一种简单的方法,我宁愿有一种简单的方法来动态创建适配器吗?

以下是一些细节,使其更加具体:

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;
}

显然,我可以提供一个成员,它使GetRowText采用两个参数,并且只将第一个传递给GetRowText()本身。

但是有没有一个可以让我这样做的助推器/适配器?

1 个答案:

答案 0 :(得分:4)

仅提供_1,它将忽略提供给m_callback的第二个参数,并使用一个MyCtrl::GetRowText参数调用int

void UseRowText() { m_callback = boost::bind(&MyCtrl::GetRowText, this, _1); }

另一方面,

void UseRowText() { m_callback = boost::bind(&MyCtrl::GetRowText, this, _2); }

也有效,我们将传递给m_callback的第二个参数发送到MyCtrl::GetRowText的第一个参数。