Одной из вещей, которая кажется необходимой при использовании STL, является способ задания локальных функций. Многие из функций, которые я обычно предоставляю, не могут быть созданы с использованием инструментов создания объектов функции STL (например, bind), мне нужно вручную перевернуть мой объект функции.
Поскольку стандарт С++ запрещает использование локальных типов в качестве аргументов в экземплярах шаблонов, лучшим из которых я смог воспользоваться, было создание небольшой библиотеки (просто показ соответствующих частей)
// library header
class MyFunctionBase<R,T>  
{  
 public:  
   virtual ~MyFunctionBase();  
   virtual R operator()(const T &) const=0;  
};    
class  MyFunction<R,T> 
{   
    MyFunctionBase<R,T> *b; 
 public: 
    ~MyFunction()
    {
       delete b;
    }
    virtual R operator()(const T &) const
    {
        return (*b)(T);
    } 
};
// source file
....
    class func: public MyFunctionBase  ...
    std::stl_alg(....    MyFunction(new funct));
Это всегда казалось мне необоснованным. Я думаю, что люди в комитете ИСО тоже так считают и добавили лямбду на С++.
Тем временем, как компиляторы решали эту проблему? (Особенно компиляторы Windows.)
Коррекция, которая может немного уточнить. Changelog: 2 ноября заменить для уточнения Поскольку стандарт С++ запрещает локальные классы как объекты функций