Описание тега generic-lambda

Generic Lambda позволяет установить для параметров функции Lambda значение auto, чтобы компилятор мог определить тип. Это генерирует лямбда-тип с шаблонным оператором (), так что один и тот же лямбда-объект может быть вызван с любым подходящим типом, и будет автоматически сгенерирована типобезопасная функция с правильным типом параметра.
3 ответа

Использование SFINAE с общими лямбдами

Могут ли общие лямбды воспользоваться правилом "Ошибка замещения - это не ошибка"? пример auto gL = [](auto&& func, auto&& param1, auto&&... params) -> enable_if_t< is_integral< std::decay_t<decltype(param1)> &…
06 июл '15 в 19:17
1 ответ

Общие лямбды с массивами статического размера в качестве аргументов

Является ли следующая универсальная (полиморфная) лямбда допустимой в C++ 14? auto f = [](auto x[3]) { x[0]; x[1]; // etc. }; GCC и Clang 4 принимают код, а Visual Studio 2017 - нет. Это законно? error C3318: 'auto [3]': an array cannot have an elem…
27 авг '17 в 08:10
2 ответа

Извлечение элемента с определенным типом из строки с общей лямбда

Я использую с ++. У меня есть строка, которая может содержать элемент с начала ^ и заканчивается $, Этот элемент может быть int или же string, Пример: "....^15$asdasd"-> 15 "...^bbbb$ccc"->"bbbb" Я хотел бы написать лямбда-функцию, которая буд…
04 авг '17 в 14:33
1 ответ

Функция возврата свойства C# - получить значение из лямбды

У меня есть класс со свойством, которое возвращает функцию. public class Demo { public Func<string,int,bool> Something { get; set; } } Если я так делаю Demo demo = new Demo(); string target; demo.Something = (a,b)=> { //in here `a` contains…
14 ноя '16 в 22:28
2 ответа

Почему общие лямбды разрешены, а вложенные структуры с шаблонными методами - нет?

Насколько я понимаю - родовые лямбды превращаются в объекты локального масштаба с шаблонами operator(), Это делает универсальный лямбда очень мощным и простым в использовании инструментом. С другой стороны, можно создавать структуры, вложенные в фун…
25 окт '16 в 14:19
1 ответ

C++14 Общие лямбды в заголовочном файле

У меня есть множество функторов, таких как следующие: const auto add = [](const auto& x) { return [=](const auto& n) { return n + x; }; }; Правильно ли хранить их в заголовочном файле? (есть побочные эффекты?)
14 фев '16 в 21:38
4 ответа

Реализация функции промежуточного программного обеспечения с использованием функций-членов с помощью lambdas/bind

У меня есть функция, Post(), что принимает два аргумента - std::string путь для прослушивания запросов и std::function<void(Request &, Response &)> обрабатывать входящий запрос. Обратите внимание, что я не могу изменить Post(), Наприме…
21 ноя '18 в 22:00
1 ответ

Имя области функции в универсальном лямбда-конце возвращаемого типа не компилируется (MSVC)

Учитывая следующий фрагмент кода, варианты 1, 2, 3 и 4 компилируются в Visual Studio 2017 (/std: C++14), а случай 5 - нет. В чем дело? int i; auto case1 = [](auto) -> decltype(i, void()) {}; int main() { int j; auto case2 = [](int) -> decltype…
3 ответа

C++, универсальная рекурсивная шаблонная функция для обхода древовидных структур

Я пытался обходить древовидные структуры с помощью универсальной рекурсивной функции, не определяя рекурсивную функцию в глобальном каждый раз для каждой структуры. //structure #1 class CA { public: std::string name; std::vector<CA*> vecChild;…
31 янв '19 в 02:27
3 ответа

Узнать тип авто

Я играю с общей лямбдой в C++1y, и меня часто смущает, что я не знаю, какой тип auto Переменный / параметр. Есть ли хороший способ узнать это? В настоящее время я использую typeid(decltype(arg)).name()) но это не очень полезно. @encode дает немного …
24 апр '14 в 10:32
3 ответа

Общие лямбды: синтаксический сахар или нет?

Дают ли C++14 общие лямбды реальное улучшение языка, или они являются своего рода синтаксическим сахаром? Есть ли ситуации, когда [](auto param1, auto param2, /* ... */ auto paramN) { return /* ... */; } не может быть заменено на template <typena…
19 авг '14 в 11:33
2 ответа

Переслать вариационный аргумент в поток с лямбдой

У меня проблемы с поиском, как использовать std::thread() с лямбдами. А именно, при наличии аргумента с переменным значением лямбда получает аргументы путем пересылки. В качестве примера: template<typename... T> auto foo(T&&... t){ [](…
2 ответа

Как написать краткое замыкание для универсального метода?

Я хочу написать реализацию функционального неуниверсального интерфейса, который имеет универсальный метод. Реализация должна быть встроенной и краткой. В качестве упрощенного примера @FunctionalInterface interface Fn { <R> R fn(R arg); } publi…
03 окт '18 в 23:23
2 ответа

std::equal_range с лямбдой

Допустим, у меня есть вектор строк, и я хочу найти все строки, которые начинаются с 'a'так что я могу сделать это: struct cmp { bool operator()( const std::string &s, char c ) const { return s.front() < c; } bool operator()( char c, const std…
30 окт '15 в 04:26
2 ответа

Законно ли явно указывать аргументы шаблонного оператора lambda общего назначения ()?

Соответствует ли следующий код C++ стандарту? #include <iostream> int main() { [](auto v){ std::cout << v << std::endl; }.operator()<int>(42); } И clang++ 3.8.0, и g++ 7.2.0 прекрасно компилируют этот код (флаги компилятора -…
3 ответа

Каков тип этой самоприменимой факториальной функции?

Я написал анонимную факториальную функцию в C++ и скомпилировал свой код с помощью g++4.9.2. Это работает хорошо. Тем не менее, я не знаю тип моей функции. #include<iostream> #include<functional> using std::function; int main() { //teste…
07 янв '15 в 07:50
3 ответа

Как написать лямбда-обертку для функции с необязательным возвращаемым значением

Я попытался написать лямбду, которая измеряет время выполнения произвольных функций. С большой помощью мне удалось это сделать для C++14 и функций, имеющих возвращаемое значение, см. Измерение времени выполнения произвольных функций с помощью C++14 …
1 ответ

Общая лямбда не может быть использована в пространстве имен?

Рассмотрим следующий фрагмент кода #include <iostream> #include <functional> namespace A { template<typename T> struct X { using Function = std::function<int(T)>; static Function f; }; template<typename T> typename X&lt…
31 янв '18 в 19:08
3 ответа

Можно ли сделать переменную шаблона в лямбда-сигнатуре универсальной?

Предположим, у вас есть функция, которая принимает std::vector любого типа и обрабатывает его некоторым образом: template<typename T> void foo(std::vector<T> &vec) { // work with vec } поскольку C++14мы можем достичь того же самого с…
20 окт '18 в 21:09
2 ответа

Универсальный std::function для хранения универсального лямбда-выражения

Когда общая лямбда хранится как std::functionнам нужно предоставить конкретный тип, что-то вроде, std::function<double(double)> таким образом, привязка к определенному типу, Следующая декларация: std::function<auto(auto)> выдает ошибку к…
18 дек '18 в 08:04