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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
#1

typedef и указатель на функцию - C++

26.12.2012, 19:18. Просмотров 3807. Ответов 16
Метки нет (Все метки)

Здравствуйте! Помогите пожлауйста с пониманем одного момента...

Так вот, есть оператор typedef.Он насколько я понял, обьявляет синоним.Напрмер:
C++
1
2
typedef int my;
my up;
То есть my==int, и мы создали переменную типа int.Это понятно.

Далее, у нас есть прототип функции void func(int*,int*), указателем на эту функцию, как я понимаю, будет void (*func)(int*,int*).

Так вот, вопрос - как запихнуть указатель на функцию в typedef, чтобы потом я мог обьявляь переменные с типом указатель на функцию с коротким именем.
В книге есть пример:
C++
1
2
typedef void(*func)(int*,int*);
func p1;
Но я не понимаю этот пример - мы же в typedef запихнули только заменяемое вроде, а на что оно заменяется, мы не написали.Но всё это работает.

Вообщем, вопросов очень много касательно этой темы.Если можно, обьсните подробно данную тему.Заранее благодарю
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2012, 19:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос typedef и указатель на функцию (C++):

Записать указатель на функцию, не используя typedef - C++
Имеется переменная - указатель на функцию fptr. Написать эту же переменную fptr, не используя typedef'ы /* Указатель на функцию void...

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) - C++
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

Указатель на шаблон класса через typedef - C++
Здравствуйте. Возникла следующая проблема: захотел определить указатель на класс с template при помощи typedef, но вываливает ошибку: ...

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель - C++
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Передача умного указателя в функцию принимающую указатель на указатель - C++
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 19:31 #2
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Но я не понимаю этот пример - мы же в typedef запихнули только заменяемое вроде, а на что оно заменяется, мы не написали.Но всё это работает.
Мы запихнули идентификатор func.
0
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,677
Записей в блоге: 17
26.12.2012, 19:33 #3
Я тоже часто теряюсь от такого синтаксиса
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
typedef void(*func)(int*,int*);
тут как бы
Код
func  ==  void xxx (int*,int*);
1
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
26.12.2012, 19:37  [ТС] #4
go, а почему тогда нельзя писать
C++
1
typedef void(*)(int*,int*) func;
Добавлено через 3 минуты
Avazart, поподробнее пожалуйста расскажите про ваш пример
0
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,677
Записей в блоге: 17
26.12.2012, 19:37 #5
А кто его знает, такую нелогичность - наверное так было проще реализовать.
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 19:39 #6
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
go, а почему тогда нельзя писать
Потому, что typedef это не простая подстановка. Почитайте про синтаксис, чтобы не путаться. Не путайте с define.
1
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
26.12.2012, 19:41 #7
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
go, а почему тогда нельзя писать
C++
1
typedef void(*)(int*,int*) func;
А почему нельзя писать так?
C++
1
void (*)(int*,int*) func;
Или так:
C++
1
void ()(int*,int*) func;
Здесь проблема не в typedef, а в синтаксисе объявления указателя на функцию, с которым вам придется мирится.

Запомните главное правило - синтаксис typedef точно так же, как и синтаксис обычного объявления переменной без typedef'а.
4
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 19:55 #8
ZaMaZaN4iK, http://msdn.microsoft.com/ru-ru/library/4x7sfztk.aspx почитай.

Цитата Сообщение от prazuber Посмотреть сообщение
Запомните главное правило - синтаксис typedef точно так же, как и синтаксис обычного объявления переменной без typedef'а.
Не правда. Вот смотрите. Я объявил
C++
1
2
3
4
typedef char* pChar;
 
const pChar a, b, c; // Замените это, как это поймет компилятор, 
// т.е. уберите typedef и сохраните смысл этого объявления :)
3
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
26.12.2012, 19:58  [ТС] #9
go, может я ошибаюсь, но должно получиться как-то так:
C++
1
const char *a,*b,*c;
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 20:00 #10
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
go, может я ошибаюсь, но должно получиться как-то так:
Нет. Поэтому должны быть typedef'ы как для неконстантных вариантов указателей, так и для константных.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 20:03 #11
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Так вот, есть оператор typedef.Он насколько я понял, обьявляет синоним.
Нет. typedef объявляет новый тип, как type на паскале. Можно его юзать и для создания синонимов, но его возможности несопоставимо шире.
0
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,677
Записей в блоге: 17
26.12.2012, 20:05 #12
Цитата Сообщение от taras atavin Посмотреть сообщение
Нет. typedef объявляет новый тип, как type на паскале. Можно его юзать и для создания синонимов, но его возможности несопоставимо шире.
Да нет не новый.. typeid проверьте...
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 20:07 #13

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
typedef объявляет новый тип, как type на паскале.
Да ладно



Добавлено через 1 минуту
taras atavin, вот синтаксис
Код
typedef type-declaration synonym;
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 20:09 #14
А как же тогда указательные типы, в том числе, на функции?
0
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,677
Записей в блоге: 17
26.12.2012, 20:14 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <typeinfo>
//----------------------------------
int main()
{
typedef int my;
 
std::cout <<  typeid(int).name() << std::endl;
std::cout <<  typeid(my).name() << std::endl;
 
return 0;
}
Добавлено через 31 секунду
Цитата Сообщение от taras atavin Посмотреть сообщение
А как же тогда указательные типы, в том числе, на функции?
А что с ними ?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2012, 20:14
Привет! Вот еще темы с ответами:

Как объявить указатель на массив через typedef и как инициализировать такой тип - C++
Как заставить заработать этот фрагмент кода? INT_L -- указатель на массив из 100 элементов типа char; Не получается в переменную C...

Typedef перед указателем на функцию - C++
Есть функция int func(int, int). Указатель на функцию int (*pointer)(int, int). Что будет означать такая запись typedef int...

Передать в неуправляемую функцию указатель на указатель - C++
Неуправляемая функция типа FUNC(int ** r); Делаю так fixed (int* ptr = arr) { FUNC((int **)ptr); ...

Указатель на функцию возвращающую указатель - C++
Всем привет. Подскажите, пожалуйста, пример не очень сложной программы, в которой встречается указатель на функцию, принимающую параметр...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.12.2012, 20:14
Ответ Создать тему
Опции темы

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