С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Cynacyn
33 / 33 / 7
Регистрация: 02.05.2013
Сообщений: 109
1

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

13.06.2013, 13:04. Просмотров 376. Ответов 4
Метки нет (Все метки)

Добрый день!
Я решаю упражнение из книжки Страуструпа, в котором необходимо создать класс, который хранит параметры кон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;
 
};

Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 13:04
Ответы с готовыми решениями:

GETS: есть ли альтернатива?
Ходят слухи, что функция get опасна (кому интересно, эта тема есть на форуме,...

Присвоение значения указателю на функцию
Есть укзатель на функцию. Есть перегруженная функция. как присвоить указателю...

Передача объекта по указателю в функцию
Здравствуйте. При передаче объекта в метод другого объекта по указателю, метод...

Передача массива в функцию по указателю
Помогите с заданием нужно передать массив в функцию по указателю

Передача вектора в функцию по указателю
Есть функция с таким прототипом: void Split(const string& text, char...

4
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.06.2013, 13:41 2
тайпдеф указателя на функцию
C++
1
typedef double (*Func)(double);
0
Cynacyn
33 / 33 / 7
Регистрация: 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);
и всё это без указателей.
возможно ли это? или это трудности перевода, опечатка, или невнимательность Бьярне?
0
taras atavin
4205 / 1768 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
13.06.2013, 14:20 4
Функция - это код, чтоб его вызвать, нужен его адрес, единственное низкоуровневое данное, которое умеет хранить адрес - это указатель, а все эти иттераторы, умные указатели, параметры-ссылки - это только надстройки над ним, а не альтернативы. Обычная переменная-ссылка - это вообще не отдельное данное, а синоним другого данного. Как говорится, слово, которое используют тогда, когда забыли произношение и написание основного слова, тебе она не подходит по причине необходимости передачи параметра.
0
Cynacyn
33 / 33 / 7
Регистрация: 02.05.2013
Сообщений: 109
13.06.2013, 14:41  [ТС] 5
Цитата Сообщение от taras atavin Посмотреть сообщение
Функция - это код, чтоб его вызвать, нужен его адрес, единственное низкоуровневое данное, которое умеет хранить адрес - это указатель, а все эти иттераторы, умные указатели, параметры-ссылки - это только надстройки над ним, а не альтернативы. Обычная переменная-ссылка - это вообще не отдельное данное, а синоним другого данного. Как говорится, слово, которое используют тогда, когда забыли произношение и написание основного слова, тебе она не подходит по причине необходимости передачи параметра.
Спасибо.
Интересно, что подразумевал Страуструп? По-идее он предполагал что человек знакомый только со ссылками сможет решить эту задачу, иначе он бы намекнул хоть как-то (типа - ох прочитайте следующую главу сначала).
Как бы указатели только через две главы.
0
13.06.2013, 14:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 14:41

Передачу аргументов в функцию по константному указателю
Собственно, тривиальный пример с тривиальным вопросом, который вскрыл мое...

Передача в функцию по ссылке или указателю
Гуру C++, как предпочтительнее делать?:) void f1(int &a) { a = 5;...

Передача аргументов в функцию по ссылке и указателю
Чем отличается передача по ссылке от передачи по указателю аргументов в функцию?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru