Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2009, 21:30   #1
Malkovich
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 16
Радость Указатели на функции(подскажите новичку)

Код:
void f1(){}
void f2(){}

int _tmain()
{
	void (*func[])() = {f1, f2};
	func[0]();
	func[1]();

	void** a = new void*;
	*a = func;
	//??????? как через 'a' реализовать f1 или f2 т.е.
             как написать указатель на указатель для функций.
	return 0;
}
ИЛИ
возможен только такой вариант

Код:
void func(){}
void main()
{
	void (*a)() = func;
	a();

	void (*b)() = a;
	b();
}
Заранее спасибо тому кто поможет.

Последний раз редактировалось Sazary; 09.07.2009 в 21:41.
Malkovich вне форума Ответить с цитированием
Старый 09.07.2009, 21:40   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

У вас ошибки. Я покажу лучше на своем примере:

Код:
#include <iostream.h>
#include <conio.h>

void f_1(int x)
        {
                cout << x;
        }


void f_2(double y)
        {
                cout << "\n" << y;
        }

void (*pf_1)(int);
void (*pf_2)(double);

int main()
{
        pf_1=f_1;
        pf_2=f_2;

        pf_1(12);
        pf_2(7.7);

        getch();

        return 0;
}
А вот так в функцию передаем другую функцию

Код:
#include <iostream.h>
#include <conio.h>

void f_1(void (*pf_2)(double))
        {
                pf_2(7.5);
        }


void f_2(double x)
        {
                cout << x;
        }

int main()
{
        f_1(f_2);

        getch();

        return 0;
}

Последний раз редактировалось profi; 09.07.2009 в 21:43.
profi вне форума Ответить с цитированием
Старый 09.07.2009, 22:08   #3
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

если заюзать boost то можно так
Код:
#include <iostream>
#include <boost/function.hpp>


int foo(int x)  { return x + 1; };
int foo_(int x) { return x + 2; };

class Employee{
public:
	Employee(int _x = 0):x(_x){}
	int operator () (){ return x; }
private:
	int x;
};
int main() 
{

	boost::function1<int, int> f;

	f = &foo;
	std::cout << f(1) << '\n';
	f = &foo_;
	std::cout << f(1) << '\n';

	boost::function1<int, Employee> fe;
	Employee e(10), e0(20);
	fe = &Employee::operator();

	std::cout << fe(e) << " " << fe(e0) << '\n';
	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 10.07.2009, 20:17   #4
mazak
Пользователь
 
Аватар для mazak
 
Регистрация: 10.07.2009
Сообщений: 29
По умолчанию Непонятно

Код:
void (*pf_1)(int);
void (*pf_2)(double);
Растолкуйте вот эти строки что это значит ? Это что и есть указатели на функции, если да то зачем стоят после них типы INT и DOUBLE?
Благими намерениями вымощена дорога в ад
mazak вне форума Ответить с цитированием
Старый 10.07.2009, 20:21   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от mazak
Это что и есть указатели на функции
Да.
Цитата:
Сообщение от mazak
если да то зачем стоят после них типы INT и DOUBLE?
Это типы аргументов, которые принимают эти функции.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 10.07.2009, 20:25   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Это типы параметров функций.
Для функции:
int foo(char const *str, double a);
указатель будет:
int (*ptr_foo)(char const*, double);
pu4koff вне форума Ответить с цитированием
Старый 17.07.2009, 13:25   #7
Malkovich
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 16
По умолчанию Подскажите плз

Здравствуйте. Непонял что такое boost в MSDN у меня такого нет.
где можно об boost прочитать.
из за этого недопонял ваш код.

и еще Почему этот код не робыт че я не так делаю:

Код:
typedef void(FN)();	
void func(FN fff){fff();}
class A
{
public:
	void f1(){cout << "aaa";}
	void f2(){cout << "bbb";}
};
void main()
{
	A a1;
	void (*fff[2])() = {a1.f1, a1.f2};
}
заранее спасибо.

Последний раз редактировалось Sazary; 17.07.2009 в 20:19.
Malkovich вне форума Ответить с цитированием
Старый 17.07.2009, 13:35   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Malkovich Посмотреть сообщение
Здравствуйте. Непонял что такое boost в MSDN у меня такого нет.
где можно об boost прочитать.
из за этого недопонял ваш код.
Буст - это есть библиотека полезная для плюсов. Что-то вроде STL, но помощнее. В MSDN про неё нет, ибо она не входит в стандарт языка С++ и с майкрософтским компилятором не распространяется. В гугле можно много про неё найти.
Цитата:
Сообщение от Malkovich Посмотреть сообщение
и еще Почему этот код не робыт че я не так делаю:

typedef void(FN)();
void func(FN fff){fff();}
class A
{
public:
void f1(){cout << "aaa";}
void f2(){cout << "bbb";}
};
void main()
{
A a1;
void (*fff[2])() = {a1.f1, a1.f2};
}
заранее спасибо.
Первые две строки вообще не в тему.
Указатели на методы классов выглядят иначе, нежели на функции.
Пробуйте так:
void (A::*fff[2])() = {a1.f1, a1.f2};
Только для вызова этих методов нужен указатель на соответствующй объект: (a1.*fff[0])();
Как-то так, если мне не изменяет память. В любом случае, лучше в книжках почитать для понимания данного вопроса.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели на функции MeGaTpoH Общие вопросы C/C++ 2 18.06.2009 16:27
Функции и Указатели на С++ Wia Помощь студентам 3 17.04.2009 14:57
[C] лабораторка. Указатели на функции. Помогите исправить ошибку) KrL^^ Помощь студентам 2 11.03.2009 22:33
Указатели. Файлы. Функции Duleks Общие вопросы C/C++ 1 15.10.2008 13:53
Указатели в функции. _LEON_ Общие вопросы C/C++ 4 04.02.2008 10:38