kawa-tの日記: C++で関数内関数 3
日記 by
kawa-t
C++では関数内においても、Cの構造体を定義する感覚で、クラスが定義できる。それを利用して、関数オブジェクトを作ると、関数内関数のように使えるらしい。
Boost.Lambdaがやっていることと比べるとたわいもないし、Schemeを使っている(と言うよりは処理系を実装しているだけなんだけど)ので、lambda式には抵抗は無いけど、必要になったところに書けることが重要な場合は、この程度で十分。
必要以上に複雑さを持ち込みたくはないし。
意外と使えない。 (スコア:0)
関数内 struct/class の関数って、関数オブジェクトにできないのか、
コンパイルできない(少なくともgcc では)。例えば、こんなの:
#include <algorithm>
#include <vector>
int evennum(const std::vector<int>& vec) {
struct even {
bool operator()(int v) const { return v % 2 == 0; }
};
return count_if(vec.begin(), vec.end(), even());
}
struct を関数の外に出すとか、C++11 の lambda とか使わないで、
コンパイルできる方法知らないですか、誰か。
Re:意外と使えない。 (スコア:1)
そりゃやろうとしてることがおかしいよ。
型スコープが関数内なのにそれを外に持ちだそうとするなんて。
素直にclass内classあたりにしれ。
...って、そのコード、なんか言ってることと違わない?
Re:意外と使えない。 (スコア:1)
C++11だとOKになりました。そのコードそのままでコンパイル通ります。