ターゲット オブジェクトに関する簡単な情報を生成する一連のメンバー関数がある状況があります。
double MyDoc::GetX(thing)
double MyDoc::GetY(thing)
etc.
同じクラスにいくつかの「整形式」メンバー関数を作成しました。
string MyDoc::PrintOne(thing, std::function<double (THING*)>)
pretty-printer 関数が data-function を取ることに気付くでしょう。つまり、ターゲットに関するさまざまなタイプの情報を作成し、「pretty print」文字列を生成できるように構成可能です。
直接使用すると、この手法は美しく機能します。
ただし、現在のアプリケーションで本当に必要なのは、そのようなエンティティの複数のレイヤーを構成することです。つまり、上記の構成全体のファンクター (関数オブジェクト) を効果的に作成して、pretty-printer 関数とそれがデータであることを指定できるようにします。取得関数、後でそれを呼び出します。パターンは z(x) -> f(x, g(x)):
auto Z = [&] (THING* thing) {
return boost::bind(
&MyDoc::PrintOne,
this,
_1,
boost::bind(MyDoc::GetX, this, _1));
}
そして、ここで私は問題に遭遇します。私は正しい構文を取得しようとしてぐるぐる回っています。または、boost::bind 構文と C++ ラムダ構文を混同しているのかもしれません。あるいは、根本的に何かを誤解しているのかもしれません。
基本的に、THING* を受け取る関数 Z と、THING* を受け取る別の関数 X を構成し、独自のロジックを使用して、特定の THING* の文字列出力を生成します。
私にはバリエーションがあります - 2 つのデータ アクセサー タイプの関数を使用するものもあれば、bool + データ アクセサーを使用するものもあります。実際には問題ではありません - 結論は同じでなければなりません:
Z -> F(x, G(x)) で Z を構成するにはどうすればよいですか?
助けてくれてありがとう!