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()本身。
但是,是否已有一个提升粘结剂/适配器,让我这样做?
VS2008 SP 1抱怨此代码。我怀疑boost :: bind正在创建一个带有1个参数的函子(至少在你的第一个例子中,这是我需要的)。如果有办法强制绑定生成匹配TooltipTextFn的函数签名,而只使用一个参数... – Mordachai 2010-03-19 22:04:39
我似乎没有遇到这个问题。我正在g ++下工作,没有现成的VS访问权限。 作为一种替代的建议,它是构造函数默认参数中的this指针吗? – tJener 2010-03-19 22:16:18
你说得对。我遇到的问题是三元条件不会编译X? Y:Z.但是如果我明确地做了X = Y,那么事情就很好。谢谢。 :) – Mordachai 2010-03-22 13:48:02