Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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; |
|
Вернуться к началу |
|
|
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. Мылшал что как то это хитро черехз шаблоны можно замутить - может кто подскажет ? |
|
Вернуться к началу |
|
|
|