С++ для начинающих




Указатели на функции, объявленные как extern "C" - часть 2


Коль скоро директива связывания относится ко всем функциям в объявлении, то как же объявить функцию С++, имеющую в качестве параметра указатель на С-функцию? С помощью директивы typedef. Например:

// FC представляет собой тип:

// С-функция с параметром типа int, не возвращающая никакого значения

extern "C" typedef void FC( int );

// f2() - C++ функция с параметром -

// указателем на С-функцию

void f2( FC *pfParm );

Упражнение 7.21

В разделе 7.5 приводится определение функции factorial(). Напишите объявление указателя на нее. Вызовите функцию через этот указатель для вычисления факториала 11.

Упражнение 7.22

Каковы типы следующих объявлений:

(a) int (*mpf)(vector<int>&);

(b) void (*apf[20])(doub1e);

(c) void (*(*papf)[2])(int);

Как сделать эти объявления более понятными, используя директивы typedef?

Упражнение 7.23

Вот функции из библиотеки С, определенные в заголовочном файле <cmath>:

double abs(double);

double sin(double);

double cos(double);

double sqrt(double);

Как бы вы объявили массив указателей на С-функции и инициализировали его этими четырьмя функциями? Напишите main(), которая вызывает sqrt() с аргументом 97.9 через элемент массива.

Упражнение 7.24

Вернемся к примеру sort(). Напишите определение функции

int sizeCompare( const string &, const string & );

Если передаваемые в качестве параметров строки имеют одинаковую длину, то sizeCompare() возвращает 0; если первая строка короче второй, то отрицательное число, а если длиннее, то положительное. Напоминаем, что длина строки возвращается операцией size() класса string. Измените main() для вызова sort(), передав в качестве третьего аргумента указатель на sizeCompare().




Содержание  Назад  Вперед