Форум программистов, компьютерный форум CyberForum.ru

Есть ли альтернатива указателю на функцию - C++

Восстановить пароль Регистрация
 
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.06.2013, 13:04     Есть ли альтернатива указателю на функцию #1
Добрый день!
Я решаю упражнение из книжки Страуструпа, в котором необходимо создать класс, который хранит параметры конcтруктора в своих данных членах, одним из параметров является функция.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef double Func(double);
 
struct Fct {
    Fct(Func& f, double r, int count)
        : function(f), rr(r), step(count) 
    {}
 
    void set_function(Func& ff) { function = ff; } // да это неправильно,
// но я надеюсь идея того что мне нужно понятна
 
private:
 
    Func& function; // изменения в коде класса, 
//который расположен ниже происходят только в этой строке
    double rr;
    int step;
 
};
Я не могу сохранить его как "значение", я могу только хранить ссылку на него.
Мне необходима возможно менять ссылку на этот объект, и тут я зашел в тупик, потому что единственный выход, который я вижу - использовать указатели.
Но по материалу книги - мы не проходили указатели. Я знаю о них из другой книги, поэтому меня гложат сомнения.

Пример с указателями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Fct {
    Fct(Func& f, double r, int count)
        : function(f), rr(r), step(count) 
    {}
 
    void set_function(Func& ff) { function = ff; } // работает
 
private:
 
    Func* function; // указатель
    double rr;
    int step;
 
};

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 13:04     Есть ли альтернатива указателю на функцию
Посмотрите здесь:

Передача массива в функцию по указателю C++
C++ Скажите есть ли в с++ альтернатива оператору case в pascal
C++ Передача объекта по указателю в функцию
Написать функцию, которая меняет местами два числа, которые передаются в нее через параметры по указателю C++
C++ Не получается присвоить значение указателю на функцию
Указатели и массивы. Передача массива в функцию по указателю C++
Передача в функцию по ссылке или указателю C++
Передача аргументов в функцию по ссылке и указателю C++
Передача параметра по указателю в виртуальную функцию C++
Как лучше передавать аргумент в функцию - по ссылке или по указателю? C++
Передача аргумента в функцию по значению, по ссылке, по указателю: в чём концептуальная разница? C++
Нюансы синтаксиса: как вызвать функцию по указателю? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.06.2013, 13:41     Есть ли альтернатива указателю на функцию #2
тайпдеф указателя на функцию
C++
1
typedef double (*Func)(double);
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.06.2013, 14:20  [ТС]     Есть ли альтернатива указателю на функцию #3
Цитата Сообщение от Jupiter Посмотреть сообщение
тайпдеф указателя на функцию
C++
1
typedef double (*Func)(double);
мне бы совсем без указателей,

я хотел альтернативный вариант возможности хранения аргумента
C++
1
typedef double (Func)(double);
с возможностью его изменения

Добавлено через 7 минут
тоесть допустим я инициализирую объeкт
C++
1
Fct ff(sin,1.4,10);
а потом мне нужно изменить его таким образом

C++
1
ff.set_function(cos);
и всё это без указателей.
возможно ли это? или это трудности перевода, опечатка, или невнимательность Бьярне?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.06.2013, 14:20     Есть ли альтернатива указателю на функцию #4
Функция - это код, чтоб его вызвать, нужен его адрес, единственное низкоуровневое данное, которое умеет хранить адрес - это указатель, а все эти иттераторы, умные указатели, параметры-ссылки - это только надстройки над ним, а не альтернативы. Обычная переменная-ссылка - это вообще не отдельное данное, а синоним другого данного. Как говорится, слово, которое используют тогда, когда забыли произношение и написание основного слова, тебе она не подходит по причине необходимости передачи параметра.
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.06.2013, 14:41  [ТС]     Есть ли альтернатива указателю на функцию #5
Цитата Сообщение от taras atavin Посмотреть сообщение
Функция - это код, чтоб его вызвать, нужен его адрес, единственное низкоуровневое данное, которое умеет хранить адрес - это указатель, а все эти иттераторы, умные указатели, параметры-ссылки - это только надстройки над ним, а не альтернативы. Обычная переменная-ссылка - это вообще не отдельное данное, а синоним другого данного. Как говорится, слово, которое используют тогда, когда забыли произношение и написание основного слова, тебе она не подходит по причине необходимости передачи параметра.
Спасибо.
Интересно, что подразумевал Страуструп? По-идее он предполагал что человек знакомый только со ссылками сможет решить эту задачу, иначе он бы намекнул хоть как-то (типа - ох прочитайте следующую главу сначала).
Как бы указатели только через две главы.
Yandex
Объявления
13.06.2013, 14:41     Есть ли альтернатива указателю на функцию
Ответ Создать тему
Опции темы

Текущее время: 13:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru