無名関数がはるかに簡単にする問題を解決しようとしていますが、これが c++ で可能かどうか疑問に思っていました。
私がやりたいことは(本質的に)
template<typename T>
T DoSomething(T one, function<T(T)> dosomething)
{
return one + dosomething(5);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
この例は、私がしなければならないことのために非常に単純化されています。C# では、p => p*5 を実行します。これが C++0x で簡単であることはわかっていますが、それを使用することはできません。私は、boost::lambda、またはboost::bindとboost::functionのプレースホルダーを組み合わせたもののいずれかでそれを行うことができるはずだと感じていますが、それを機能させることができないようです. 無理かもしれませんし、それもいいですが、無理なら答えてください。ありがとう。
編集: わかりました、int の単純なケースは正常に動作するようですが、より複雑な構造はどうでしょうか? それでは、試してみましょう
struct NumHolder
{
int x;
}
template<typename T>
T DoSomething(T one, function<T(NumHolder)> dosomething)
{
NumHolder temp;
temp = 5
return one + dosomething(temp);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
ここで、私の C# 式は p => p.temp * 5 の行に沿ったものになります。ブーストを使用して C++ でこれを行うことは可能ですか?
編集 2: OK、今私はただ興味があります:D ラムダ式内で関数を呼び出すにはどうすればよいですか? だから、私たちが持っているなら
int ChangeVal(int mult)
{
return mult*5;
}
struct NumHolder
{
int x;
}
template<typename T>
T DoSomething(T one, function<T(NumHolder)> dosomething)
{
NumHolder temp;
temp = 5
return one + dosomething(temp);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
C# では、p => ChangeVal(p) を呼び出すことができます。C++ ラムダ式を使用した場合、構文はどのようになりますか?