Одна из вещей, которая кажется необходимой при использовании STL, - это способ задания локальных функций.
Многие функции, которые я обычно предоставляю, не могут быть созданы с помощью инструментов создания объектов функций STL (например, bind), я должен вручную свернуть свой объект функций.
Поскольку стандарт C ++ запрещает использование локальных типов в качестве аргументов в экземплярах шаблонов, лучшее, что я смог использовать, - это создать небольшую библиотеку (просто показывая соответствующие части)
// 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));
Это всегда казалось мне громоздким. Я думаю, что люди в комитете ISO тоже так считают и добавили лямбду в C ++.
Между тем, как компиляторы решили эту проблему? (Особенно для компиляторов Windows.)
Исправление, которое может немного прояснить.
Changelog:
2 ноября
заменить, чтобы уточнить
Поскольку стандарт C ++ запрещает локальные классы как объекты функций