重複の可能性:
STL アルゴリズムでのローカル クラスの使用
ローカルで定義された関数オブジェクトを STL 関数に渡そうとしていますが、機能しません。世界のどこで、これが可能であってはならないと宣言されていますか? それは私にはかなり魅力的に見えます!
失敗するコードは次のとおりです。
int main() {
std::vector<int> v;
struct gen { int operator()(){return 4;} };
std::cout<<gen()()<<std::endl; // works
std::generate_n(std::back_inserter(v),4,gen()); // fails
}
ちなみに、gen_s が構造体だからではなく、gen_s::gen が静的関数だからです。ステートレス ジェネレーターは何に使用されるので、これはあまりクールではありません。
std:vector<int> v;
struct gen_s { static int gen() { return 4; };
std::generate_n(std::back_inserter(v),5,gen_s::gen);
では、ローカルに定義された関数オブジェクトはどうでしょうか?