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