В 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. Никаких реальных обходных путей для старого стандарта нет, за исключением того, что структура находится в анонимном пространстве имен за пределами основного. –