Quelle est la façon de créer un coup de pouce à foncteur qui se fixe sur un argument

StackOverflow https://stackoverflow.com/questions/2480074

  •  21-09-2019
  •  | 
  •  

Question

J'ai besoin d'un pointeur de fonction qui prend deux arguments et retourne une chaîne.

Je souhaite passer un adaptateur qui encapsule une fonction qui prend un argument, et renvoie la chaîne (à savoir écarter l'un des arguments).

Je peux trivialement construire mon propre adaptateur, qui prend les 2 arguments, appelle la fonction enveloppé qui passe juste l'un argument par.

Mais je préférerais avoir un moyen simple de créer un adaptateur à la volée, s'il existe un moyen facile de le faire en C ++ / boost?

Voici quelques détails pour faire cela un peu plus concret:

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;
}

Evidemment, je peux fournir un élément qui adapte GetRowText prendre deux arguments et ne laisse passer que le premier à GetRowText () lui-même.

Mais est-il déjà un liant boost / adaptateur qui me permet de le faire?

Était-ce utile?

La solution

En ne fournissant _1, il ignorera le 2ème paramètre donné à m_callback et appeler MyCtrl::GetRowText avec un paramètre de int.

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

Par contre,

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

est également valable, où nous envoyons le 2ème paramètre passé à m_callback dans le 1er paramètre de MyCtrl::GetRowText.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top