Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шаблонная лямбда. как? 
V
    Опции темы
boostcoder
Дата 1.3.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



по лямбде как таковой, вопросов нет.
но интересно, как записать лямбду, чтоб она была шаблоном? такое возможно?

пример:
Код

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
   std::vector<int> iv(10);
   std::for_each(iv.begin(), iv.end(),
      [](const T& item) { // какой тип?
         std::cout << item << std::endl;
      }
   );
}

http://liveworkspace.org/code/8b217cf3a56e...b74b813a672cd55

спасибо.

PM WWW   Вверх
Abyx
Дата 1.3.2011, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



я тоже такую хочу, а еше вывод типов ее аргументов

Добавлено @ 19:38
по вопросу: decltype(iv)::reference_type

Это сообщение отредактировал(а) Abyx - 1.3.2011, 19:38
PM MAIL   Вверх
boostcoder
Дата 1.3.2011, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Abyx @  1.3.2011,  19:36 Найти цитируемый пост)
а еше вывод типов ее аргументов

вывод в каком виде?

зы
помоему у тебя была какая-то похожая тема...

Добавлено через 1 минуту и 2 секунды
Цитата(Abyx @  1.3.2011,  19:36 Найти цитируемый пост)
decltype(iv)::reference_type

это скорее одна из возможностей, но не основная.
наверняка для лямбды, должен быть какой-то свой синтаксис.

Добавлено через 3 минуты и 18 секунд
Цитата(Abyx @  1.3.2011,  19:36 Найти цитируемый пост)
по вопросу: decltype(iv)::reference_type

так имеем другую ошибку:
Цитата

source.cpp: In function 'int main()':
source.cpp:8:39: error: expected unqualified-id before 'item'
source.cpp:8:39: error: expected ')' before 'item'
source.cpp: In lambda function:
source.cpp:8:39: error: expected '{' before 'item'
source.cpp: In function 'int main()':
source.cpp:8:39: error: expected ')' before 'item'
source.cpp:8:45: error: expected ';' before '{' token
source.cpp:11:4: error: expected primary-expression before ')' token
source.cpp:11:4: error: expected ';' before ')' token


Добавлено через 11 минут и 58 секунд
по теме: http://stackoverflow.com/questions/3575901...ns-be-templated
похоже что невозможно :(
PM WWW   Вверх
Abyx
Дата 1.3.2011, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



boostcoder, само собой невозможно, лямбда- это выражение, она ничего не знает о своем контексте
Если бы была нормальная поддержка компилятора как в C#, мы могли бы писать "x => x * 2"
PM MAIL   Вверх
baldina
Дата 2.3.2011, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



http://liveworkspace.org/code/2804908862f1...80a6afa7db766af

Добавлено через 3 минуты и 31 секунду
только это лямбда в шаблоне, а не шаблонная лямбда. шаблонная лямбда не может быть, т.к. её определение дается всегда в определенном (возможно шаблонном) контексте 
Цитата(Abyx @  1.3.2011,  20:20 Найти цитируемый пост)
Если бы была нормальная поддержка компилятора как в C#, мы могли бы писать "x => x * 2" 

Abyx, шаблоны тут непричем. в Scala например это обычная запись, однако типы при этом определены (из контекста)

Добавлено через 7 минут и 56 секунд
 x=>x+1 в C++ это 
Код

[](auto x){ return x+1; }

что тоже невозможно))))
PM MAIL   Вверх
EnergoHokum
Дата 2.3.2011, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Первое, что приходит в голову:

Код

#include <iostream>
#include <vector>
#include <algorithm>

int main(int argc,char** argv)
{
 typedef std::vector<int> ivector;
 ivector iv(10);
 std::for_each(iv.begin(), iv.end(),
                       [](const ivector::value_type& item)
                       { // какой тип?
                         std::cout << item << std::endl;
                       });
}

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.