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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2010, 23:35   #11
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

я кажется понял, сейчас попробую
capta1n вне форума Ответить с цитированием
Старый 11.07.2010, 23:35   #12
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Ну наконец то Да.
profi вне форума Ответить с цитированием
Старый 12.07.2010, 00:06   #13
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

что-то туго у меня с этой реализацией) но я пытаюсь)

есть вот такой вариант:

Код:
#include <iostream>

using namespace std;

typedef
	void (*type_func)();
typedef
	void (  (*mas_type[3])() );
//-----------------//

void f0(void);
void f1(void);
void f2(void);

//-----------------//

mas_type* func(void);

void main(){
	mas_type* (*pf)();
	pf = func;
	 mas_type* f = pf();
	 for (int i(0); i<3; i++)
		 (*f)[i]();
	 cin.get();
	 return;
}

void f0(){
	cout << 1 << endl;
	return;
};

void f1(){
	cout << 2 << endl;
	return;
};

void f2(){
	cout << 3 << endl;
	return;
}

mas_type* func(){
	type_func* f = new type_func[3];
	f[0]=f0;
	f[1]=f1;
	f[2]=f2;
	mas_type* pf = (mas_type*)f;
	return pf;
}
такой:

Код:
#include <iostream>

using namespace std;

typedef
	void (*type_func)();
typedef
	void (  (*mas_type[3])() );
typedef
	mas_type* (*pmas_type)();
//-----------------//

void f0(void);
void f1(void);
void f2(void);

//-----------------//

mas_type* func(void);

void main(){
	pmas_type pf = func;
	mas_type* f = pf();
	for (int i(0); i<3; i++)
		(*f)[i]();
	cin.get();
	return;
}

void f0(){
	cout << 1 << endl;
	return;
};

void f1(){
	cout << 2 << endl;
	return;
};

void f2(){
	cout << 3 << endl;
	return;
}

mas_type* func(){
	type_func* f = new type_func[3];
	f[0]=f0;
	f[1]=f1;
	f[2]=f2;
	mas_type* pf = (mas_type*)f;
	return pf;
}

Последний раз редактировалось Stilet; 12.07.2010 в 12:18.
capta1n вне форума Ответить с цитированием
Старый 12.07.2010, 11:12   #14
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

capta1n первый вариант больше нравится. Кстати для себя нашел новое, например можно написать такой прототип
Код:
int (*func())[10]
, что означает: функция возвращает указатель на массив из 10-ти элеметов. Покопался в книгах по С++, такого не нашел, потом открыл (чисто случайно) книгу "Б. Керниган, Д. Ритчи. Язык программирования Си" и как раз там рассказывалось про данные конструкции. Видно для совместимости их оставили в С++.
Думаю тут
Код:
typedef void (*(*(*mas_func)())[3])();
нужно убрать [3]
Код:
typedef void (*(*(*mas_func)()))();
и незаморачиваться. Будет тогда примерно звучать: указатель на функцию mas_func возвращает указатель на массив, который содержит указатели на функции, которые не принимают параметры и возвращают void.
profi вне форума Ответить с цитированием
Старый 12.07.2010, 12:35   #15
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

В C++ указатели на функции реализуются через шаблоны, в С# через делегаты...
В вашем случае это никак не указатель на фукцию - это просто указатель на первый элемент массива какого-либо типа.
Не изобретайте велосипед
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 12.07.2010, 13:26   #16
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
void (*(*(*mas_func)())[3])();
Это не указатель на функцию? Тогда учите Си.
Цитата:
В C++ указатели на функции реализуются через шаблоны
Если в С++ нет указателей на функцию - застрелите меня . Причем тут шаблоны? Читайте посты в данной теме.

Последний раз редактировалось profi; 12.07.2010 в 13:32.
profi вне форума Ответить с цитированием
Старый 12.07.2010, 13:50   #17
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
int (*func())[10]
я считаю, что это объявление 10 указателей на функцию типа

Код:
int func(void)
и вовсе не тип функции, которая возвращает указатель на массив из 10 элементов

хочу сказать, что вы маньяк
capta1n вне форума Ответить с цитированием
Старый 12.07.2010, 13:54   #18
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

это уж точно, маньяк. Зачем так гемориться с указателями на функции?
честно говоря я не понял на какую функцию эти три указателя =\
void (*(*(*mas_func)())[3])();
NiCola999 вне форума Ответить с цитированием
Старый 12.07.2010, 14:03   #19
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
char (*(*x())[2])()
х: функц. возвр. указ, на массив[2] из указ, на функц. возвр. char
"Б. Керниган, Д. Ритчи. Язык программирования Си"

Логично предположить что
Код:
int (*x())[2]
функц. возвр. указ, на массив[2] типа int.

capta1n и NiCola999 просто стало интересно, что так можно делать. До этого момента я не знал, что так можно.

P.S. Цифру 2 в примере я подставил .

Последний раз редактировалось profi; 12.07.2010 в 14:06.
profi вне форума Ответить с цитированием
Старый 12.07.2010, 14:05   #20
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:

int (*func())[10]

я считаю, что это объявление 10 указателей на функцию типа

Код:


int func(void)

и вовсе не тип функции, которая возвращает указатель на массив из 10 элементов
неверно. вот объявление 10 указателей на функцию вышеописанного типа:
Цитата:
int (*func[10])();
а там объявление функции, которая возвращает указатель на массив из 10 интов
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели. Функции. Динамические массивы Exorcist2012 Помощь студентам 0 25.06.2010 01:21
указатели на функции MeGaTpoH Общие вопросы C/C++ 2 18.06.2009 16:27
Функции и Указатели на С++ Wia Помощь студентам 3 17.04.2009 14:57
Указатели. Файлы. Функции Duleks Общие вопросы C/C++ 1 15.10.2008 13:53
Указатели в функции. _LEON_ Общие вопросы C/C++ 4 04.02.2008 10:38