Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > функция в виде аргумента


Автор: AlexanderRufus 26.7.2006, 19:44
void func(int I, double Mas[])  //функция вне класса
{
    //body function
}

void CLASS::FUNC(int I, double Mas[])  //функция в классе
{
    //body function
}

class CLASS
{
    //property
public:
    void FUNC(int I,double Mas[]);
    void MAIN();
}

void CLASS::MAIN()
{
    //LibraryFunction - библиотечная функция
    LibraryFunction(func);  //Все Ok!
    LibraryFunction(FUNC); //Error!
}

Почему функция вне класса передается удачно, а таже функция описанная в классе передается с ошибкой? Как эту ошибку устранить? 

Автор: Earnest 26.7.2006, 19:54
Потому что это вовсе не та же функция. 
У нее совершенно другой тип, а у указателя на нее может быть совершенно другой размер. 
Указатели на внешнюю функцию и на функцию-член не взаимозаменяемы: для вызова функции-члена требуется объект, для которого она вызывается.

Добавлено @ 19:56 
Если функцию FUNC можно объявить как статический член класса, то тогда все прокатит. 

Автор: NextAlex 26.7.2006, 20:40
Вот очень неплохо описано как делается указатель на функцию - член класса
http://www.gamedev.ru/faq/?id=52 
и Earnest права - если функция будет статическим членом класса, то всё прокатит, правда будут проблемы уже с обращением из неё к нестатическим членам класса, но например можно ей в качестве параметра передавать указатель на экземпляр класса, с которым она будет работать. 

Автор: Prehistorik 27.7.2006, 09:03
Поправьте меня, если я не прав, но в члене-классе первым, невидимым параметром является указатель(ссылка) на объект. 

Автор: NextAlex 27.7.2006, 09:13
Prehistorik, если бы это было сказано по русски я бы мог попытаться поправить smile
что ты имел в виду ? 

Автор: Earnest 27.7.2006, 12:52
Prehistorik, ты прав:
В функции-члене класса первым невидимым аргументом является this.
 

Автор: NextAlex 28.7.2006, 19:28
Prehistorik Earnest, я с вами согласен полностью, но поясните если сможете как это может помочь в данном случае?
статические методы класса не могут использовать ни this ни любые другие методы, использующие this
единственный путь - передавать в статическую функцию указатель на экземпляр класса 

Автор: Prehistorik 29.7.2006, 10:35
NextAlex, Я бы лучше сделал функцию враппер для функции класса.... Но это как-то криовато.... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)