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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
26.12.2012, 19:18     typedef и указатель на функцию #1
Здравствуйте! Помогите пожлауйста с пониманем одного момента...

Так вот, есть оператор 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 запихнули только заменяемое вроде, а на что оно заменяется, мы не написали.Но всё это работает.

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

C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
C++ [Задача] Записать указатель на функцию, не используя typedef
Передать в неуправляемую функцию указатель на указатель C++
C++ Как объявить указатель на массив через typedef и как инициализировать такой тип
Функция, получающая указатель на обычную функцию, получает указатель на метод класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 19:31     typedef и указатель на функцию #2
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Но я не понимаю этот пример - мы же в typedef запихнули только заменяемое вроде, а на что оно заменяется, мы не написали.Но всё это работает.
Мы запихнули идентификатор func.
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
26.12.2012, 19:33     typedef и указатель на функцию #3
Я тоже часто теряюсь от такого синтаксиса
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
typedef void(*func)(int*,int*);
тут как бы
Код
func  ==  void xxx (int*,int*);
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
26.12.2012, 19:37  [ТС]     typedef и указатель на функцию #4
go, а почему тогда нельзя писать
C++
1
typedef void(*)(int*,int*) func;
Добавлено через 3 минуты
Avazart, поподробнее пожалуйста расскажите про ваш пример
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
26.12.2012, 19:37     typedef и указатель на функцию #5
А кто его знает, такую нелогичность - наверное так было проще реализовать.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 19:39     typedef и указатель на функцию #6
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
go, а почему тогда нельзя писать
Потому, что typedef это не простая подстановка. Почитайте про синтаксис, чтобы не путаться. Не путайте с define.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
26.12.2012, 19:41     typedef и указатель на функцию #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'а.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 19:55     typedef и указатель на функцию #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 и сохраните смысл этого объявления :)
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
26.12.2012, 19:58  [ТС]     typedef и указатель на функцию #9
go, может я ошибаюсь, но должно получиться как-то так:
C++
1
const char *a,*b,*c;
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 20:00     typedef и указатель на функцию #10
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
go, может я ошибаюсь, но должно получиться как-то так:
Нет. Поэтому должны быть typedef'ы как для неконстантных вариантов указателей, так и для константных.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 20:03     typedef и указатель на функцию #11
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Так вот, есть оператор typedef.Он насколько я понял, обьявляет синоним.
Нет. typedef объявляет новый тип, как type на паскале. Можно его юзать и для создания синонимов, но его возможности несопоставимо шире.
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
26.12.2012, 20:05     typedef и указатель на функцию #12
Цитата Сообщение от taras atavin Посмотреть сообщение
Нет. typedef объявляет новый тип, как type на паскале. Можно его юзать и для создания синонимов, но его возможности несопоставимо шире.
Да нет не новый.. typeid проверьте...
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 20:07     typedef и указатель на функцию #13

Не по теме:

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



Добавлено через 1 минуту
taras atavin, вот синтаксис
Код
typedef type-declaration synonym;
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 20:09     typedef и указатель на функцию #14
А как же тогда указательные типы, в том числе, на функции?
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
26.12.2012, 20:14     typedef и указатель на функцию #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 Посмотреть сообщение
А как же тогда указательные типы, в том числе, на функции?
А что с ними ?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 20:15     typedef и указатель на функцию #16
Так здесь то синоним.

Добавлено через 48 секунд
Цитата Сообщение от Avazart Посмотреть сообщение
А что с ними ?
Ну в синтаксис декларации синонимов они ни как не лезут, хоть копром забивай.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2012, 20:21     typedef и указатель на функцию
Еще ссылки по теме:

Как правильно пользоваться typedef для декларации типа указателя на функцию? C++
Typedef перед указателем на функцию C++
C++ Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 20:21     typedef и указатель на функцию #17
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну в синтаксис декларации синонимов они ни как не лезут, хоть копром забивай.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <typeinfo>
 
typedef void (my)(int);
 
void m(int);
 
int main()
{
    std::cout <<  typeid(m).name() << std::endl;
    std::cout <<  typeid(my).name() << std::endl;
    std::system("pause");
    return 0;
}
Yandex
Объявления
26.12.2012, 20:21     typedef и указатель на функцию
Ответ Создать тему
Опции темы

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