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

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

Войти
Регистрация
Восстановить пароль
 
Damaks
18 / 10 / 1
Регистрация: 02.09.2010
Сообщений: 235
#1

Приведение void указателя к определенному типу с сохранением результата - C++

22.08.2012, 04:25. Просмотров 922. Ответов 5
Метки нет (Все метки)

Есть функция
C++
1
2
3
funс(void *pointer, char type) {
    ...
}
Нужно чтобы в данной функции этот указатель приводился к определенному типу в зависимости от type, так, чтобы дальше можно было с ним работать без постоянного приведения типа через скобки.

Пробовал создавать другой указатель нужного типа:
C++
1
2
    if(type) typeone *pointer2 = (typeone *)pointer;
    else typetwo *pointer2 = (typetwo *)pointer;
Однако этот вариант не работает, т.к. новые указатели локальны в пределах if(){}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2012, 04:25     Приведение void указателя к определенному типу с сохранением результата
Посмотрите здесь:

C++ Приведение указателя на void к другому типу?
C++ Приведение типов string.size() к (void*)
Приведение указателя на функцию C++
C++ Приведение void* к типу указателя на структуру
Приведение void* указателя к типу C++
C++ как в c++ проверить пренадлежит ли переменная определенному типу?
C++ Приведение переменной к другому типу
Приведение к типу-наследнику C++
Приведение к void C++
Приведение типа указателя C++
C++ Приведение к базовому типу
Приведение к типу C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пaтрик
 Аватар для Пaтрик
395 / 388 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
22.08.2012, 07:51     Приведение void указателя к определенному типу с сохранением результата #2
C++
1
2
3
4
5
template<class T>
void func(void *ptr)
{
    T *variable = (T*)ptr;
}
Но мне кажется, что тут что-то не так. Почему сразу все не сделать через шаблоны?
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 08:02     Приведение void указателя к определенному типу с сохранением результата #3
Damaks, другое хочет: чтобы указатель, в теле функции, менял тип по условию. Мне кажется, компилятор такое не позволит сделать.
Пaтрик
 Аватар для Пaтрик
395 / 388 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
22.08.2012, 08:11     Приведение void указателя к определенному типу с сохранением результата #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
funс(void *pointer, char type) {
    switch (type) {
    case 'i':
        int *i = (int*)pointer;
        ...
        break;
    case 'f':
        float *f = (float*)pointer;
        ...
        break;
    }
}
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 08:31     Приведение void указателя к определенному типу с сохранением результата #5
Тогда уж так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void f(void *pointer, char type)
{
    if (type) 
    {
        int *i = (int*)pointer;
        ...
    }   
    else
    {
        double *f = (double*)pointer;
        ...     
    }
}
Damaks
18 / 10 / 1
Регистрация: 02.09.2010
Сообщений: 235
22.08.2012, 18:09  [ТС]     Приведение void указателя к определенному типу с сохранением результата #6
Тогда код в функции придется повторять дважды. Других вариантов точно нет?
Yandex
Объявления
22.08.2012, 18:09     Приведение void указателя к определенному типу с сохранением результата
Ответ Создать тему
Опции темы

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