|
|
|
| Есть класс-предок (описан ниже). В параметрах конструктора класса есть ФУНКЦИЯ ОБРАТНОГО ВЫЗОВА.
class ActiveTemperatureSensor {
public:
ActiveTemperatureSensor (Location, void (*f)(Location, Temperature));
~ActiveTemperatureSensor();
void calibrate(Temperature actualTemperature);
void establishSetpoint(Temperature setpoint, Temperature delta);
Temperature currentTemperature() const;
private:
...
};
Не могу понять, что такое функция обратного вызова? Просто вместо void (*f)(Location, Temperature) подставится то значение, которое вернет функция f( , )? Но она возвращает void! | |
|
|
|
|
|
|
|
для: Энтри
(20.06.2006 в 13:54)
| | Почитал немного, понял, что предок предоставляет родителю ЭТУ функцию (функцию обратного вызова), а родитель вызывает ЕЕ, когда считает нужным, так?
Но примерно, какой должен быть код? | |
|
|
|
|
|
|
|
для: Энтри
(20.06.2006 в 13:54)
| | Функция обратного вызова - это по сути указатель на функцию - программа состоит из операторов и данных, в C можно создавать указатель не только на данные, но и на функции, далее по этому указателю её можно в любой момент вызвать, причём в зависимости от логики указатель может указывать на разные функции... Таким образом можно написать свою функцию и передать её внутрь библиотеки. | |
|
|
|
|
|
|
|
для: cheops
(20.06.2006 в 16:48)
| | Но тогда в библиотеке надо прописать, как обращаться с этой функцией, заранее, так? | |
|
|
|
|
|
|
|
для: Энтри
(20.06.2006 в 17:41)
| | Да порядок обращения определяется прототипом функции, например, тип указателя
void (*f)(Location, Temperature)
|
что функция принимает два аргумента типа Location и Temperature и ничего не возвращает. | |
|
|
|
|
|
|
|
для: cheops
(20.06.2006 в 22:21)
| | Хорошо. Почитаю еще. | |
|
|
|