C++ 如何使用boost绑定组合多个函子?

C++ 如何使用boost绑定组合多个函子?,c++,boost,lambda,boost-bind,C++,Boost,Lambda,Boost Bind,我有一种情况,我有一系列的成员函数,它们产生关于目标对象的简单信息: double MyDoc::GetX(thing) double MyDoc::GetY(thing) etc. 我在同一个类中创建了一些“非常格式化”的成员函数: string MyDoc::PrintOne(thing, std::function<double (THING*)>) 这就是我遇到问题的地方。我正努力让语法正确,或者我可能对Booo::BIN语法和C++ LAMBDA语法混淆,或者我可能根本

我有一种情况,我有一系列的成员函数,它们产生关于目标对象的简单信息:

double MyDoc::GetX(thing)
double MyDoc::GetY(thing)
etc.
我在同一个类中创建了一些“非常格式化”的成员函数:

string MyDoc::PrintOne(thing, std::function<double (THING*)>)
这就是我遇到问题的地方。我正努力让语法正确,或者我可能对Booo::BIN语法和C++ LAMBDA语法混淆,或者我可能根本误解了什么?

基本上,我想组合一个函数Z,它接受一个对象*和另一个函数X,它也接受一个对象*并且,使用它自己的逻辑,为给定对象*生成一个字符串输出

我有一些变体-有些采用两个数据访问器类型的函数,或者可能采用bool+数据访问器。其实并不重要-底线应该是一样的:

在Z->F(x,G(x))的地方如何合成Z?

谢谢你的帮助

boost::bind
(和
std::bind
)急切地求值嵌套的绑定表达式,因此您拥有的将匹配签名
字符串MyDoc::PrintOne(THING*,double)
。要防止立即求值并直接返回嵌套的绑定表达式(适用于构造
std::function
),请使用
boost::protect

boost::bind(
    &MyDoc::PrintOne,
    this,
    _1,
    boost::protect(boost::bind(&MyDoc::GetX, this, _1))
)

标题为“.

@ildjarn”的文档部分概述了这一点,它似乎起到了作用!“我在同一个类中制作了一些“非常格式化”的成员函数…”-这太糟糕了:(我读了好几遍链接的“文档”。它相当多余。我认为我可能需要使用protect,但对它没有任何理解,我不想在没有任何理解的情况下随意使用它。
boost::bind(
    &MyDoc::PrintOne,
    this,
    _1,
    boost::protect(boost::bind(&MyDoc::GetX, this, _1))
)