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

Функция без параметров? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
26.04.2012, 16:45     Функция без параметров? #1
Начал разбираться с библиотекой alglib для решения интеграла сложной функции. В документации нашел такой код, но не могу разобраться с одним моментом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "integration.h"
 
using namespace alglib;
void int_function_1_func(double x, double xminusa, double bminusx, double &y, void *ptr) 
{
    // this callback calculates f(x)=exp(x)
    y = exp(x);
}
 
int main(int argc, char **argv)
{
    //
    // This example demonstrates integration of f=exp(x) on [0,1]:
    // * first, autogkstate is initialized
    // * then we call integration function
    // * and finally we obtain results with autogkresults() call
    //
    double a = 0;
    double b = 1;
    autogkstate s;
    double v;
    autogkreport rep;
 
    autogksmooth(a, b, s);
    alglib::autogkintegrate(s, int_function_1_func);
    autogkresults(s, v, rep);
 
    printf("%.2f\n", double(v)); // EXPECTED: 1.7182
    return 0;
}
Собственно, объявлена функция int_function_1_func, у неё есть параметры, но потом каким-то образом она используется по одному только имени без каких-либо параметров
C++
1
alglib::autogkintegrate(s, int_function_1_func);
Расскажите, это какой-то метод С++, о котором я не знаю, и как такое работает. Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
26.04.2012, 16:49     Функция без параметров? #2
Цитата Сообщение от soundtrack Посмотреть сообщение
Расскажите, это какой-то метод С++, о котором я не знаю, и как такое работает. Заранее спасибо
называется указатель на функцию
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
26.04.2012, 16:56  [ТС]     Функция без параметров? #3
Цитата Сообщение от panicwassano Посмотреть сообщение
называется указатель на функцию
ну указатель специфицируется символом "*", или с функциями это работает не так? И в чём смысл данной операции? Какие параметры передаются функции?
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
26.04.2012, 17:54     Функция без параметров? #4
Можно и &int_function_1_func. Стандартное преобразование:
An lvalue of function type T can be converted to a prvalue of type “pointer to T.” The result is a pointer to the function.
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
26.04.2012, 22:06  [ТС]     Функция без параметров? #5
Спасибо) теперь хоть знаю в каком направлении читать...а то первый раз если честно с таким понятием встретился.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.04.2012, 10:50     Функция без параметров? #6
Цитата Сообщение от soundtrack Посмотреть сообщение
Собственно, объявлена функция int_function_1_func, у неё есть параметры, но потом каким-то образом она используется по одному только имени без каких-либо параметров
Адрес точки входа в любую функцию параметров не имеет, а
Цитата Сообщение от soundtrack Посмотреть сообщение
alglib::autogkintegrate(s, int_function_1_func);
означает передачу в другую функцию именно адреса точки входа. Параметры же потом будет формировать другая функция и вызывать функцию int_function_1_func с этими параметрами, вызывая её по адресу, а не по имени.

Добавлено через 3 минуты
Цитата Сообщение от soundtrack Посмотреть сообщение
ну указатель специфицируется символом "*",
Имя функции - уже указатель, а его значение - адрес точки входа в саму функцию. При вызове по адресу используется только значение этого указателя без идентификатора. Поэтому "&" не используется. Кстати, это вызов, а не декларация, значит "*" - разыменование, то есть сам объект по указателю, а указатель по объекту - "&".
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
27.04.2012, 15:45  [ТС]     Функция без параметров? #7
taras atavin, спасибо, вроде немного разобрался. Ну а как быть если мне нужно эти функции забросить внутрь класса как методы? В таком случае на такой код:
C++
1
alglib::autogkintegrate(s, int_function_1_func);
компилятор ругается словами:
error C3867: sloi::int_function_1_func: в вызове функции отсутствует список аргументов; используйте "&sloi::int_function_1_func" для создания указателя на член,
а если создавать указатель, как он и советует:
C++
1
alglib::autogkintegrate(s, &sloi::int_function_1_func);
то ругается вот так:
error C2664: alglib::autogkintegrate: невозможно преобразовать параметр 2 из "void (__thiscall sloi::* )(double,double,double,double &,void *)" в "void (__cdecl *)(double,double,double,double &,void *)"
Сложно с этими указателями на функции...
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.04.2012, 20:55     Функция без параметров? #8
Цитата Сообщение от soundtrack Посмотреть сообщение
: невозможно преобразовать параметр 2 из "void (__thiscall sloi::* )(double,double,double,double &,void *)" в "void (__cdecl *)(double,double,double,double &,void *)"
Передаёте указатель на метод класса, а ожидается - указатель на функцию.
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
27.04.2012, 21:10  [ТС]     Функция без параметров? #9
gray_fox, если не сложно, напишите как нужно тогда реализовать правильно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 21:19     Функция без параметров?
Еще ссылки по теме:

C++ Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел
Функция с переменным числом параметров C++
C++ Передача параметров (функция)

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.04.2012, 21:19     Функция без параметров? #10
Цитата Сообщение от soundtrack Посмотреть сообщение
int_function_1_func
должна быть обычной функцией (как в первом сообщении) или статическим методом класса. Метод класса и функция имеют разные типы, ведь метод класса вызывается всегда для объекта этого класса.
Yandex
Объявления
27.04.2012, 21:19     Функция без параметров?
Ответ Создать тему
Опции темы

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