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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2015, 12:31   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Обьект функции

Доброго дня !

Подскажите пожалуйста , как заменить class func с оператором ()

на обычную функцию

Код:
template <class T>

void func(const T &t) 
{
	printf("\nt = %d\n",t);
}
???
_________________________________

Код:
template <class T>

class func

{

public:
        void operator () (const T &t) 
	{
		printf("\nt = %d\n",t);
	}
};
пытался написать так

Код:
template <class T>

void func(const T &t) 
{
	printf("\nt = %d\n",t);
}


template <class T>

void hgj(T V)

{
	V(569);
}

int main()

{   
    hgj(func <int>);
    getch();
	return 0;
}
но получаю ошибки.

наверное тут что-то не то

Код:
 hgj(func <int>);
RAFA91 вне форума Ответить с цитированием
Старый 12.08.2015, 12:38   #2
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Например, можете использовать std :: bind, std :: ptr_fun для создания функционального объекта из указателя на функцию.
Можете использовать std :: function.
Можете сделать специализацию для шаблона
Croessmah вне форума Ответить с цитированием
Старый 12.08.2015, 12:42   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

к примеру как в этом коде заставить

Код:
 for_each(k.begin(),k.end(),Ca<int>());
работать с обычной функцией

Код:
template <class T> void Ca (const T &x) {printf("\nx = %d\n",x);}


Код:
#include <stdio.h>
#include<vector>
#include<algorithm>
 
 
using namespace std;
 
template <class T>
 
class Ca
 
{
 
public:

      void operator () (const T &x) {printf("\nx = %d\n",x);}
};
 
 
int main()
 
{
       vector<int> k(5);
 
    for (int i=0;i<5;i++)
 
    k[i] = i*3;
 
    printf("\n*********************\n");
 
    for_each(k.begin(),k.end(),Ca<int>());
   
    
 
    return 0;
}

Последний раз редактировалось RAFA91; 12.08.2015 в 12:51.
RAFA91 вне форума Ответить с цитированием
Старый 12.08.2015, 13:46   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну можно обернуть в лямбду разве что
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.08.2015, 13:49   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну можно обернуть в лямбду разве что
Microsoft Visual C++ 6.0 это не потянет
RAFA91 вне форума Ответить с цитированием
Старый 12.08.2015, 14:02   #6
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
Microsoft Visual C++ 6.0 это не потянет
А это?
Код:
#include <functional>
//...
for_each(k.begin(),k.end(),std::ptr_fun(Ca<int>));
Croessmah вне форума Ответить с цитированием
Старый 12.08.2015, 14:33   #7
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

мне вот интересно , как тут это работает )))

тоже самое и я хочу сделать вместо класса с оператором ().
Изображения
Тип файла: jpg Б.JPG (63.4 Кб, 35 просмотров)
RAFA91 вне форума Ответить с цитированием
Старый 12.08.2015, 15:49   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Разве не так?

bool func(int)
{
...
}
for_each(k.begin(),k.end(), func);

Вы же сами привели скриншот примера, в чем собственно вопрос?

Последний раз редактировалось waleri; 12.08.2015 в 15:51.
waleri вне форума Ответить с цитированием
Старый 12.08.2015, 16:16   #9
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

я делал по примеру скриншота

Код:
#include <stdio.h>
#include<vector>
#include<algorithm>
 
using namespace std;
 
template <class T>
 
void Ca (const T &x) {printf("\nx = %d\n",x);}

int main()
 
{
       vector<int> k(5);
 
    for (int i=0;i<5;i++)
 
    k[i] = i*3;
 
    printf("\n*********************\n");
 
    for_each(k.begin(),k.end(),Ca<int>);
   
   return 0;
}
и получил ошибки.
RAFA91 вне форума Ответить с цитированием
Старый 12.08.2015, 16:38   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ошибка-то какая? У меня все работает в современных компиляторах, видимо дело в VC++ 6.0. Зачем вы его используете?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьект в динамике RAFA91 Общие вопросы C/C++ 12 28.11.2015 21:17
static обьект RAFA91 Общие вопросы C/C++ 6 28.05.2015 12:35
Enum в обьект. vjmap C# (си шарп) 2 08.10.2011 11:16
обьект в обьект... Olejik Общие вопросы по Java, Java SE, Kotlin 6 22.03.2010 22:23
Не могу создать обьект mrandrey Общие вопросы Delphi 6 04.06.2007 16:04