2

2つの引数を取り、文字列を返す関数ポインタが必要です。

1つの引数を取り、文字列を返す(つまり、引数の1つを破棄する)関数をラップするアダプターを渡したいと思います。

2つの引数を取り、1つの引数だけを渡すラップされた関数を呼び出す、独自のアダプターを簡単に作成できます。

しかし、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を適応させて2つの引数を取り、最初の引数のみをGetRowText()自体に渡すメンバーを提供できます。

しかし、それを可能にするブーストバインダー/アダプターはすでにありますか?

4

1 に答える 1

4

を指定するだけ_1で、指定された2番目のパラメーターを無視し、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); }

も有効です。ここで、に渡された2番目のパラメーターをm_callbackの1番目のパラメーターに送信しますMyCtrl::GetRowText

于 2010-03-19T19:35:15.553 に答える