2

我需要一个函数指针,它接受两个参数并返回一个字符串。

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

我可以轻松构建自己的适配器,它接受 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() 本身。

但是是否已经有一个增强绑定器/适配器可以让我这样做?

4

1 回答 1

4

通过仅提供_1,它将忽略给定的第二个参数并使用一个参数进行m_callback调用。MyCtrl::GetRowTextint

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

另一方面,

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

也是有效的,我们将传递给的第二个参数发送m_callbackMyCtrl::GetRowText.

于 2010-03-19T19:35:15.553 回答