35 / 35 / 7
Регистрация: 02.05.2013
Сообщений: 109
1

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

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

Author24 — интернет-сервис помощи студентам
Добрый день!
Я решаю упражнение из книжки Страуструпа, в котором необходимо создать класс, который хранит параметры кон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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2013, 13:04
Ответы с готовыми решениями:

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

Альтернатива Nadavi.ru есть?
Они платят за клики по банеру с разделами: Сотовые телефоны GPS навигаторы и т.д. Если...

Есть ли альтернатива pickle ?
Приветствую, всезнающий All ! Есть у меня тут большой объект с кучей вложенных нестандартных...

Есть ли альтернатива фреймам
При создании сайта возникла следующая проблема - страница разбита на три фрейма. 1 - заголовок. 2 -...

4
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.06.2013, 13:41 2
тайпдеф указателя на функцию
C++
1
typedef double (*Func)(double);
0
35 / 35 / 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
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
13.06.2013, 14:20 4
Функция - это код, чтоб его вызвать, нужен его адрес, единственное низкоуровневое данное, которое умеет хранить адрес - это указатель, а все эти иттераторы, умные указатели, параметры-ссылки - это только надстройки над ним, а не альтернативы. Обычная переменная-ссылка - это вообще не отдельное данное, а синоним другого данного. Как говорится, слово, которое используют тогда, когда забыли произношение и написание основного слова, тебе она не подходит по причине необходимости передачи параметра.
0
35 / 35 / 7
Регистрация: 02.05.2013
Сообщений: 109
13.06.2013, 14:41  [ТС] 5
Цитата Сообщение от taras atavin Посмотреть сообщение
Функция - это код, чтоб его вызвать, нужен его адрес, единственное низкоуровневое данное, которое умеет хранить адрес - это указатель, а все эти иттераторы, умные указатели, параметры-ссылки - это только надстройки над ним, а не альтернативы. Обычная переменная-ссылка - это вообще не отдельное данное, а синоним другого данного. Как говорится, слово, которое используют тогда, когда забыли произношение и написание основного слова, тебе она не подходит по причине необходимости передачи параметра.
Спасибо.
Интересно, что подразумевал Страуструп? По-идее он предполагал что человек знакомый только со ссылками сможет решить эту задачу, иначе он бы намекнул хоть как-то (типа - ох прочитайте следующую главу сначала).
Как бы указатели только через две главы.
0
13.06.2013, 14:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2013, 14:41
Помогаю со студенческими работами здесь

Есть ли альтернатива Compiz?
Доброго дня всем! собственно вопрос: установлен Debian 7.1 x64 (Xfce) , есть ли какая замена...

Есть ли альтернатива WebBrowser
Здравствуйте! Помогите написать простенькую программку. Много чего почитал, кое чего понял, но...

Есть ли альтернатива DataGridView
Подскажите какой-нибудь бесплатный или взломанный Grid-компонент для VB.NET вместо тормознутого...

Есть ли альтернатива bmp?
Господа есть ли возможность использовать CMP компоненты для oc4j или orion, при условии что все...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru