В последнее время я очень волнуюсь за поддержку лямбда в VC2010. Я постепенно начинаю понимать весь потенциал этой функции в преобразовании C++ во что-то гораздо лучше.Планы библиотек для C++ 0x?
Но потом я понял, что этот потенциал сильно зависит от поддержки основного потока lambdas в повседневных библиотеках, таких как boost и QT.
Кто-нибудь знает, планируют ли расширить эти библиотеки новыми функциями C++ 0x?
lambdas практически заменяет потребность в boost :: лямбда и все в повышении, которое взаимодействует с ним. QT может добавить поддержку лямбды во всех их контейнере и, возможно, даже в качестве альтернативного способа определения SLOT
сек
'повышение :: bind' цели еще одна вещь, не замененные на лямбды. 'std :: bind' выполнит свою работу по связыванию функций. Вместо этого lambdas частично заменит функциональность в 'boost :: lambda' (и ее преемнике, boost :: phoenix, afaik). То, что лямбды в настоящее время не могут сделать, это полиморфизм 'boost :: lambda'.Возможность создавать функции, которые работают с любым типом аргумента: '_1 ++' увеличивает любой тип аргумента, а '[] (int & a) {a ++; } 'может только увеличивать int. Я слышал, что концепции из C++, полиморфные лямбды снова являются опцией. –
@litb - это интересно, есть ли у вас какие-либо ссылки на материал, объясняющий, почему концепции были блокпостом для лямбда с параметрами типа? –
Я не знаю документа, который подробно обсуждает его, но я читал это на usenet. Я предполагаю, что должен был быть способ сказать: 'требует Blah [] (T t) {...}' или что-то вроде этого, чтобы сделать шаблон 'operator()' lambda ограниченным. Другая проблема может заключаться в том, что в ограниченном шаблоне вы можете вызывать только другие ограниченные шаблоны, чтобы разрешить проверку шаблона. Таким образом, с лямбдой, имеющей простой непокрытый шаблонный 'operator()', вы не могли бы использовать это в ограниченном шаблоне следующим образом: 'template void f (T t) {([] (u) {...}) (т); } '. –