Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

C++ передать функцию класса как параметр

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
VitST
Гость





СообщениеДобавлено: Вт Сен 28 2004 16:39    Заголовок сообщения: C++ передать функцию класса как параметр Ответить с цитатой

вопрос в принципе в следуующем:

//есть например класс:

class TA
{
public:
int MyF(void) {return 0;}
};

//есть тип функтора:

typedef int(*MyFunct)(void);

//есть функция

int asd(void) {return 0;}

//если мы где созданим функтор с типом MyFunct
//то мы можем ему присвоить значение=asd
//а если попробуем присвоить ему значение функции класса
//то компилятор ругнется,
//как можно присвоить функтору значение функции класса
//не делая эту функции static???
Вернуться к началу
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Вт Сен 28 2004 17:51    Заголовок сообщения: Ответить с цитатой

Попробуй приведи тип.
MyFunct some = (MyFunct) TA::MyF;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Чт Сен 30 2004 09:09    Заголовок сообщения: Ответить с цитатой

Господа! Не забыввайте, что функция-член класса имеет ещё один скрытый аргумент. т.е. int TA::MyF(void) на самом деле имеет прототип
int TA::MyF(TA *t, void); Иначе откуда бы эта функция знала с полями какого экземпляра класса следует работать? (Это не важно что в данном примере функция ничего не делает)

Чтобы передать функцию-член класса как отдельную сущность в качестве параметра, её следует объявлять как static. Естественно, если она должна делать что-либо с полями класса, которому принадлежит, то она должна полуать указатель на экземпляр этого класса и выполнять обращения к полям через этот указатель. Отличие от функции не члена класса с той же функциональностью, то что её не нужно описывать как friend для доступа к private полям, да и саму её можно описать как private.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AlexNor
Гость





СообщениеДобавлено: Чт Сен 30 2004 21:45    Заголовок сообщения: Ответить с цитатой

Найди книгу автора Александрэску. Книга про шаблоны - точно помню - с помощью шаблонов он это делал очень элегантно.
Вернуться к началу
Генераторный хрендель
Гость





СообщениеДобавлено: Пт Окт 01 2004 09:54    Заголовок сообщения: Ответить с цитатой

Меня тоже интересует этот вопрос - как передать в функцию указатель на функцию, которая может быть определённа в любом классе и не как static. Мылшал что как то это хитро черехз шаблоны можно замутить - может кто подскажет ?
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...