Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2011, 13:30   #11
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
Радость

Цитата:
ну где тут твой предикат то?
Ну так ведь я его убрал, с ним ж не работает :)
Было так:
Код:
		find_first_of(
		TokValue.begin(), TokValue.end(),
		pCharSet->begin(), pCharSet->end(),
		operator==
		);
Потом добавил <char,char> и получилось operator==<char,char>. Появившиеся ошибки описаны в предыдущих сообщениях.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 19.07.2011, 13:34   #12
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Сtrl
Цитата:
find_first_of(
TokValue.begin(), TokValue.end(),
pCharSet->begin(), pCharSet->end(),
operator==
);
и что это такое? предикат может быть либо функцией, либо объектом класса с перегруженным operator(), либо лямбда функцией.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 19.07.2011, 13:38   #13
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

О том и речь в теме, чтобы использовать оператор как предикат. Ведь любой оператор реализуется в виде функции, или я что-то не так понимаю? А лямбда - это, конечно, хорошо, но в VC++ их еще нет.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 19.07.2011, 13:42   #14
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Сtrl
оператор должен принадлежать какому то объекту. у char и так есть встроенный operator==, зачем ты еще что то передаешь.
Цитата:
А лямбда - это, конечно, хорошо, но в VC++ их еще нет.
в 2010 вроде есть, я g++ использую

Цитата:
Может с перегруженным operator()?
это я на твой код насмотрелся с operator==
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 19.07.2011, 13:55   #15
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
в 2010 вроде есть
Может и так (во всяком случае синтаксис студия распознает). Но что я тогда не так делаю?
Код:
#include <iostream>
using namespace std;
int F(int a, int(*f)(int))
{
	return f(a);
}
int main()
{
	cout << F(2, [](int a)->int{return a*2;});
	cin.get();
	return 0;
}
Ошибка:
Цитата:
F: невозможно преобразовать параметр 2 из "`anonymous-namespace'::<lambda0>" в "int (__cdecl *)(int)"
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 19.07.2011, 14:10   #16
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

насколько я знаю, в нынешнем стандарте c++0x нельзя лямба функцию передавать в качестве обычного указателя на функцию. да и компиля на работе нет, поддерживающего этот стандарт, ничего сказать не могу

Код:
typedef int func(int);

int F(int a, func f)
{
	return f(a);
}
int main()
{
	cout << F(2, [](int a)->int{return a*2;});
	cin.get();
	return 0;
}
попробуй.

не, бред лямбду только через шаблон пока можно передать. т.е для стандартных алгоритмов без проблем
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 19.07.2011 в 14:34.
pproger вне форума Ответить с цитированием
Старый 19.07.2011, 14:19   #17
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Сtrl

F: невозможно преобразовать параметр 2 из "`anonymous-namespace'::<lambda0>" в "int (__cdecl *)(int)"

Данная фича (пока? ) не поддерживается в VS2010

Фича была асилена в gcc
Rififi вне форума Ответить с цитированием
Старый 19.07.2011, 19:25   #18
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
В алгоритме find_first_of требуется предикат на сравнение, есть ли возможность передать туда оператор ==? Если что - сравниваются два объекта типа char.
Исходный алгоритм, который вы указали, как раз и проверяет значения в итераторах на равенство. Но если вам так нужно самому поставить равенство, то есть функциональный предикат

std::equal_to;

Он объявлен в <functional> Он и будет вызывать ваш оператор равенства независимо от того, объявлен ли он как член класса, или как отдельная функция. То есть обеспечивается некоторая независимость от реализации оператора равенства.

Помимо него можно использовать std::not_equal_to, std::greater, std::less, std::greater_equal, std::less_equal
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 19.07.2011 в 19:28.
Сыроежка вне форума Ответить с цитированием
Старый 19.07.2011, 23:08   #19
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Сыроежка, вот эти функции - то что нужно. Спасибо.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оператор выбора или условный оператор[Перенесено из JavaSE] merhaba1992 Помощь студентам 1 20.01.2011 17:06
Условный оператор. Оператор выбора. Pascal Сержuk Помощь студентам 4 17.11.2010 12:50
Вычислить используя, оператор цикла for и оператор безусловного пе Knubbe Помощь студентам 1 18.12.2009 10:24
Как прописать условный оператор кликанья на кнопку? mauar Общие вопросы Delphi 30 01.06.2009 20:15