我需要一个带有两个参数并返回一个字符串的函数指针。
我想传递一个包含一个带有一个参数的函数的适配器,并返回该字符串(即丢弃其中一个参数)。
我可以简单地构建我自己的适配器,它接受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()本身。
但是有没有一个可以让我这样做的助推器/适配器?
答案 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
的第一个参数。