C++ 什么';这是创建绑定参数的函子的方法

C++ 什么';这是创建绑定参数的函子的方法,c++,boost,functor,C++,Boost,Functor,我需要一个函数指针,它接受两个参数并返回一个字符串 我想传递一个适配器,它包装一个接受一个参数的函数,并返回字符串(即放弃其中一个参数) 我可以简单地构建自己的适配器,它接受两个参数,调用只传递一个参数的包装函数 但是,如果在C++/boost中有一种简单的方法可以实现的话,我更希望有一种快速创建适配器的简单方法 这里有一些细节可以让这更具体一些: typedef boost::function<CString (int,int)> TooltipTextFn; class MyC

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

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

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

但是,如果在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;
}
typedef boost::函数TooltipTextFn;
类MyCtrl
{
公众:
MyCtrl(TooltipTextFn callback=boost::bind(&MyCtrl::GetCellText,this,_1,_2)):m_callback(callback){}
//问题:如何简单地包装GetRowText以符合TooltipTextFn,只需丢弃_2?!
void UseRowText(){m_callback=boost::bind(&MyCtrl::GetRowText,this,_1,?);}
私人:
CString GetCellText(int行,int列);
CString GetRowText(int行);
TooltipTextFn m_回调;
}
显然,我可以提供一个成员,该成员调整GetRowText以接受两个参数,并且只将第一个参数传递给GetRowText()本身


但是已经有一个boost活页夹/适配器允许我这样做了吗?

通过只提供
\u 1
,它将忽略给定给
m\u回调的第二个参数,并使用一个
int
参数调用
MyCtrl::GetRowText

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

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

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

VS2008 SP 1对此代码的投诉的第一个参数中。我怀疑boost::bind正在创建一个接受1个参数的函子(至少在您的第一个示例中,这是我需要的)。如果有一种方法可以强制绑定生成与TooltipTextFn匹配的函数签名,而只使用一个参数……我似乎没有遇到这种情况。我在g++下工作,没有现成的VS访问权限。作为替代建议,是构造函数默认参数中的
这个
指针吗?你说得对。我遇到的问题是三元条件不能编译X?但是如果我显式地做了一个X=Y;然后一切都好了。谢谢。:)