2
 vector<double> result(vectorOfClassA.size());
 vector<classB> temp(vectorOfClassA.size());
 std::transform(vectorOfClassA.begin(), vectorOfClassA.end(), back_inserter(temp),
                std::tr1::bind(&A::memberVariableOfClassB, std::tr1::placeholders::_1));
 std::transform(temp.begin(), temp.end(), back_inserter(result),
                 std::tr1::bind(&B::getValue, std::tr1::placeholders::_1));

1 つの変換を使用したいのですが、コンパイルできません

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

double getValue()クラスBメンバー関数は次のとおりです。それを行う方法または私のコードの何が問題なのですか?

4

1 に答える 1

2

コンパイラが C++11 をサポートしている場合は、ラムダを利用できます。

std::transform(vectorOfClassA.begin(), vectorOfClassA.end(), 
  back_inserter(result),
  [] (const A& a)
  {
  return a.memberVariableOfClassB.GetValue();
  });
于 2012-10-19T14:20:01.747 に答える