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

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

Войти
Регистрация
Восстановить пароль
 
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
#1

Пояснение typedef - C++

25.05.2013, 01:02. Просмотров 546. Ответов 17
Метки нет (Все метки)

C++
1
typedef bool (*comparator)(void* fisrt, void* second);
что делает *comparator, и что это вобще ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 01:02     Пояснение typedef
Посмотрите здесь:

Typedef и функция - C++
есть такая функция void implicitCurve(const double* x, double* y, double* Df) { // funkcyja f(a,b,c) =...

Про typedef - C++
Читаю книгу Дейтела наткнулся на программу, в которой не могу понять одну деталь, а именно смотрим в комментариях ниже. #include...

не видит typedef - C++
вот примерно что в первом - a.h файле class a { enum eSomeEnum { a = 0, b, //... и так далее ...

Про typedef - C++
Читая книгу Дейтеля, дошёл до стеков и не понял небольшую мелочь, которая вводит меня в заблуждение. У нас есть структура и прототипы...

typedef и vector - C++
typedef int array_Llist_upgrade; std::vector <array_Llist_upgrade> Llist_upgrade; array_Llist_upgrade array_Llist_upgrade_tmp; ...

Оператор typedef - C++
Имеет ли смысл говорить о времени жизни, области видимости и о связывании для типов (НЕ ПЕРЕМЕННЫХ), которые определяются этой директивой?

Непонятный typedef - C++
typedef int (*LPMYDLLFUNC)(int,int); после данного typedef, LPMYDLLFUNC используется как указатель на функцию, принимающую два...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2013, 01:03     Пояснение typedef #2
псевдоним для типа - указатель на функцию, которая возвращает bool и принимает два параметра void*
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 01:07  [ТС]     Пояснение typedef #3
Цитата Сообщение от Croessmah Посмотреть сообщение
псевдоним для типа - указатель на функцию, которая возвращает bool и принимает два параметра void*
а для чего она нужна ?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2013, 01:13     Пояснение typedef #4
Цитата Сообщение от Xsenon_rus Посмотреть сообщение
а для чего она нужна ?
Можно убъявить указатель на функцию, которая соответствует прототипу.
C++
1
comparator myfunc=функция;
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 01:14  [ТС]     Пояснение typedef #5
и ещё
C++
1
void InsLast(void* El)
как в функции InsLast в качестве значения можно обьявлять ешё одну функцию ?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2013, 01:17     Пояснение typedef #6
C++
1
2
3
4
5
typedef bool (*comparator)(void*,void*);
 
void InsLast(void* El,comparator func){
    //...
}
Теперь функция принимает указатель на функцию.
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 01:27  [ТС]     Пояснение typedef #7
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
typedef bool (*comparator)(void*,void*);
 
void InsLast(void* El,comparator func){
    //...
}
Теперь функция принимает указатель на функцию.
помоему я начинаю понимать.

а если
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int L1List::Find(void* El, comparator comp, int pos)
{
    GoBOL();// первый элемент - текущий
 
    int i=1;
    while (cur->next != NULL)
    {       
        if ((i >= pos) && (comp(El, GetCur()))) break;
        GoNext();// делает текущим следующий по порядку элемент списка
        i++;
    }
 
    if (comp(El, GetCur()) && (pos <= i)) return i;//getcur - Возвращает значение текущего элемента
    else return (-1);
}
на что в данном случае будет указывать comparator comp ?и void* El.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2013, 01:37     Пояснение typedef #8
Цитата Сообщение от Xsenon_rus Посмотреть сообщение
на что в данном случае будет указывать comparator comp ?
На то, что передадут.
Для примера:
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
35
36
37
38
39
40
41
42
43
44
45
46
#include <cstdlib>
#include <iostream>
typedef bool (*comparator)(int,int);
 
bool less(int x,int y){
    return x<y;
}
bool greates(int x,int y){
    return y<x;
}
 
 
void bubbleSort(int* arr, int size,comparator comp=&less)
{
    int tmp, i, j;
 
    for(i = 0; i < size - 1; ++i)
    {            
        for(j = 0; j < size - 1; ++j)
        {     
            if (comp(arr[j + 1],arr[j])) 
            {
                tmp = arr[j + 1]; 
                arr[j + 1] = arr[j]; 
                arr[j] = tmp;
            }
        }
    }
}
 
 
void outarray(int * arr,int size){
    for(int i=0;i<size;++i)
        std::cout<<arr[i]<<" ";
    std::cout<<std::endl;
}
 
int main(){
    const int size=10;
    int arr[size]={3,9,1,7,3,5,1,8,4,3};
    outarray(arr,size);
    bubbleSort(arr,size);
    outarray(arr,size);
    bubbleSort(arr,size,&greates);
    outarray(arr,size);
}
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 01:48  [ТС]     Пояснение typedef #9
Цитата Сообщение от Croessmah Посмотреть сообщение
На то, что передадут.
Для примера
OMG я понял =) Спасибо большое последний вопрос. После использования comparator comp=&less я могу его переписвоить. И второе значение comp и comparator я сам придумываю ?
OhMyGodSoLong
25.05.2013, 01:51
  #10

Не по теме:

Лучше бы научили его функторам...

Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2013, 01:55     Пояснение typedef #11

Не по теме:

Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Лучше бы научили его функторам...
да какой из меня учитель



Цитата Сообщение от Xsenon_rus Посмотреть сообщение
После использования comparator comp=&less я могу его переписвоить.
Конечно можете. Это просто значение по умолчанию для данного указателя.

Цитата Сообщение от Xsenon_rus Посмотреть сообщение
И второе значение comp и comparator я сам придумываю ?
Если честно, то не понял вопроса.
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 02:05  [ТС]     Пояснение typedef #12
C++
1
2
3
typedef bool (*[B]comparator[/B])(int,int);
 
void bubbleSort(int* arr, int size,[B]comparator [I]comp[/I][/B]=&less)
Просто они идут без объявления вот я и спрашиваю. comparator это указатель с ним все понятно, а comp ?
Вот comparator это параметр typedef или может быть

C++
1
2
3
typedef bool (*4toto)(int,int);
 
void bubbleSort(int* arr, int size,4toto drugoe=&less)
?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2013, 02:12     Пояснение typedef #13
Цитата Сообщение от Xsenon_rus Посмотреть сообщение
comparator это указатель
Это не указатель. typedef задает псевдонимы.
После такого:
C++
1
typedef bool (*comparator)(int,int);
можно объявлять переменные типа comparator, которые будут указателями на функцию

Добавлено через 2 минуты
Вышеуказанный пример можно переписать и без typedef:
C++
1
void bubbleSort(int* arr, int size,bool (*comp)(int,int)=&less)
но воспринимается это не так легко
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 02:13  [ТС]     Пояснение typedef #14
То есть comp являеться указателем ?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2013, 02:19     Пояснение typedef #15
Цитата Сообщение от Xsenon_rus Посмотреть сообщение
То есть comp являеться указателем ?
да. На функцию.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
typedef void (*MYFUNCTION)();
 
 
void foo_1(){
    std::cout<<"foo_1()"<<std::endl;
}
void foo_2(){
    std::cout<<"foo_2()"<<std::endl;
}
 
int main(){
    int n;
    MYFUNCTION func=NULL;
    std::cin>>n;
    if(n){
        func=&foo_1;
    }else{
        func=&foo_2;
    }
    func();
}
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 02:22  [ТС]     Пояснение typedef #16
Но ведь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
typedef void (*MYFUNCTION)();
 
 
void foo_1(){
    std::cout<<"foo_1()"<<std::endl;
}
void foo_2(){
    std::cout<<"foo_2()"<<std::endl;
}
 
int main(){
    int n;
    MYFUNCTION func=NULL;
    std::cin>>n;
    if(n){
        foo_1();
    }else{
        foo_2();
    }
    func();
}
тоже самое
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2013, 02:23     Пояснение typedef #17
Проблема только в гибкости
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2013, 02:26     Пояснение typedef
Еще ссылки по теме:

Использование typedef - C++
Объясните пожалуйста для чего тут typedef и как pf(j) связан с функцией double Y???????? Программа: #include &lt;iostream&gt; #include...

Наследование typedef'a - C++
Итак, в некотором классе typedef'ом определен тип: template&lt;typename T&gt; class Shape { public: typedef T sclar; }; ...

Отличия using и typedef - C++
Всем привет. Собственно вопрос в чем различия при использовании: using size_type = unsigned long; и typedef unsigned...

применение typedef - C++
Какова роль &quot;*node&quot;(последняя строка) в данном случае? typedef struct rbtree_node { enum color color; void *key; void *value; ...

_W64 в typedef - C++
Что такое _W64? typedef _W64 int ptrdiff_t;


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

Или воспользуйтесь поиском по форуму:
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 02:26  [ТС]     Пояснение typedef #18
Цитата Сообщение от Croessmah Посмотреть сообщение
Проблема только в гибкости
Понятно. Как всегда все постигаеться в практике Спасибо тебе большое Croessmah.
Yandex
Объявления
25.05.2013, 02:26     Пояснение typedef
Ответ Создать тему
Опции темы

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