我有一個情況我有一系列的成員函數產生一個目標對象的簡單信息:如何使用boost綁定組合多個函子?
double MyDoc::GetX(thing)
double MyDoc::GetY(thing)
etc.
我在同一個班做了一些「非常格式化」的成員函數:
string MyDoc::PrintOne(thing, std::function<double (THING*)>)
你會發現,漂亮的打印機功能需要一個數據的函數 - 也就是說,它是組合的,這樣我可以創建各種類型的有關目標的信息,併產生一個「漂亮的打印」串吧。
在直接使用中,這種技術的工作很好。
但是,我真正想要的當前應用程序是組合這些實體的多個層次 - 即爲上述組合作爲一個整體有效創建一個函子(函數對象),以便我可以指定漂亮的打印機功能,它是數據採集功能,並在稍後調用。模式是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++ lambda語法感到困惑,或者我只是從根本上誤解了某些東西?
基本上,我想編寫一個函數Z,它需要一個THING *和另一個函數X,它還需要一個THING *,並且使用它自己的邏輯爲給定的THING *生成一個字符串輸出。
我有變化 - 有些需要兩個數據存取器類型的功能,或者可能是一個bool +數據存取器。沒有關係 - 底線應該是相同的:
如何在Z - > F(x,G(x))處編寫Z?
感謝您的幫助!
@ildjarn - 似乎在做詭計! – Mordachai
「我在同一個班級中做了一些」漂亮的格式化「成員函數...」 - 太糟糕了:( –