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

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

Восстановить пароль Регистрация
 
Damaks
18 / 10 / 1
Регистрация: 02.09.2010
Сообщений: 235
22.08.2012, 04:25     Приведение void указателя к определенному типу с сохранением результата #1
Есть функция
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++ Приведение void* к типу указателя на структуру
Приведение void* указателя к типу C++
C++ как в c++ проверить пренадлежит ли переменная определенному типу?
C++ приведение переменной к другому типу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 08:02     Приведение void указателя к определенному типу с сохранением результата #3
Damaks, другое хочет: чтобы указатель, в теле функции, менял тип по условию. Мне кажется, компилятор такое не позволит сделать.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 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
5282 / 4801 / 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 указателя к определенному типу с сохранением результата
Ответ Создать тему
Опции темы

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