C++ 如何摆脱临时,并使用一个转换来完成工作?

C++ 如何摆脱临时,并使用一个转换来完成工作?,c++,C++,这里的double getValue()是B类成员函数。如何执行或我的代码有什么问题?如果您的编译器支持C++11,您可以使用lambda: std::transform(vectorOfClassA.begin(), vectorOfClassA.end(), back_inserter(result), std::tr1::bind(&B::getValue, std::tr1::bind(&a

这里的
double getValue()
是B类成员函数。如何执行或我的代码有什么问题?

如果您的编译器支持C++11,您可以使用lambda:

std::transform(vectorOfClassA.begin(), vectorOfClassA.end(), back_inserter(result),
               std::tr1::bind(&B::getValue,
                              std::tr1::bind(&A::memberVariableOfClassB,
                                             std::tr1::placeholders::_1)));

如果您的编译器是旧的,您可以使用正则函数而不是lambda函数(相同的想法)@user1759558:它是lambda表达式的capture子句。编译失败的原因可能仅仅是您拼写错误了
memberVariableOfClassB
?几乎没有机会,因为我复制并粘贴了它。那么您如何解释您的“失败”代码是
memberVariableOfCallB
?调用与Class.memberVariableOfCallB不同这里应该是classB成员变量的类型,而不是classB,对吗?您的第一个代码块显示
memberVariableOfClassB
,但第二个代码块显示
memberVariableOfCallB
。你看到区别了吗?你明白为什么这种差异很重要吗?我不能告诉你它应该是什么,因为我看不到你剩下的代码。这是您的代码,因此您应该已经知道自己的变量或函数的名称。
std::transform(vectorOfClassA.begin(), vectorOfClassA.end(), back_inserter(result),
               std::tr1::bind(&B::getValue,
                              std::tr1::bind(&A::memberVariableOfClassB,
                                             std::tr1::placeholders::_1)));
std::transform(vectorOfClassA.begin(), vectorOfClassA.end(), 
  back_inserter(result),
  [] (const A& a)
  {
  return a.memberVariableOfClassB.GetValue();
  });