C++では、ローカル関数またはファンクタをグローバル関数に渡すことは全く不可能ですか?すべての記号が「いいえ」を指しているようです。これは積分器のような簡単な数学関数の実装を解決する最も簡単な方法のようです:ローカル関数をパラメータとしてグローバル関数に渡す
template<class integrand>
void integrate(integrand f) {
...
f();
...
}
int main() {
struct twofer {
int operator()(int i) const { return 2*i; }
};
integrate(twofer());
}
またはそのようなものです。これは、ローカルオブジェクトをテンプレートに渡すことができないために失敗します。私は新しい標準がラムダ関数をここで使うことを許していることは知っていますが、今は新しい標準を使うことができません。私は本当に関数がローカルで宣言されることを本当に望んでいます。なぜなら、特にプロキシのための実際のコードでは、物を読みやすくすると思うからです。私は、クラスまたは構造体に完全な関数を入れることができることを知っていますが、やはり読みやすさを損なうと思います。選択肢はありますか?
私は、無名関数が唯一のC++ 11でサポートされているので、あなたは、「正常な機能」を構築する必要があります怖いhttp://en.wikipedia.org/wiki/Anonymous_function #C.2B.2B – Vyktor
ローカルパラメータをテンプレートパラメータとして使用する*も* C++ 11で動作します。構造体をmainの外側の匿名の名前空間に置くことを除いて、古い標準の実際の回避策はありません。 –