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

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

Восстановить пароль Регистрация
 
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
25.05.2013, 01:02     Пояснение typedef #1
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++
typedef C++
typedef и vector C++
typedef в c++ C++
Typedef C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 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 C++

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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

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