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

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

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

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

22.08.2012, 04:25. Просмотров 959. Ответов 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(){}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2012, 04:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приведение void указателя к определенному типу с сохранением результата (C++):

Приведение void* указателя к типу - C++
struct tParamStruct { const char* Result; }; tParamStruct ParamStruct; void show(void *AdressPS) { // ????????

Приведение указателя на void к другому типу? - C++
в поиске смотрел - не помогло! Возникла проблемка: В книге сказано, что указателю на void можно присваивать все типы указателей без...

Приведение void* к типу указателя на структуру - C++
Тема обсуждалась здесь, но решения так и нет нормального Есть два (и более, хоть до 20) линейных списков и функция обхода списка В...

Приведение к void - C++
Доброй ночи! Просматривая код некоторой программы, обнаружил конструкцию следующего вида: void function(char a, char *p) { ...

Приведение к типу - C++
В чем разница? static_cast<int>(a); и (int)a

Приведение к базовому типу - C++
#include <iostream> using namespace std; class A{ public: virtual ~A() {} }; class B: public A{ };

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Пaтрик
415 / 390 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
22.08.2012, 07:51 #2
C++
1
2
3
4
5
template<class T>
void func(void *ptr)
{
    T *variable = (T*)ptr;
}
Но мне кажется, что тут что-то не так. Почему сразу все не сделать через шаблоны?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 08:02 #3
Damaks, другое хочет: чтобы указатель, в теле функции, менял тип по условию. Мне кажется, компилятор такое не позволит сделать.
0
Пaтрик
415 / 390 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
22.08.2012, 08:11 #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;
    }
}
1
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 08:31 #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;
        ...     
    }
}
0
Damaks
18 / 10 / 1
Регистрация: 02.09.2010
Сообщений: 235
22.08.2012, 18:09  [ТС] #6
Тогда код в функции придется повторять дважды. Других вариантов точно нет?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2012, 18:09
Привет! Вот еще темы с ответами:

Приведение к типу-наследнику - C++
#include &lt;iostream&gt; class A { }; class B: public A { void foo() const { std::cout &lt;&lt; &quot;some is king of every fish&quot;; } }; int...

как в c++ проверить пренадлежит ли переменная определенному типу? - C++
Например, что бы если пользователь ввел не число а символ, то в консоль выводилось сообщение об ошибке.

Приведение переменной к другому типу - C++
float a = (float)x; // старый стиль float b = static_cast&lt;float&gt;(y); // современный стиль разве по старому не удобнее? почему...

Приведение указателя на функцию - C++
Здравствуйте, у меня простейший вопрос, но самому не догнать что-то... В качестве аргумента некой функции используется указатель на...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.08.2012, 18:09
Ответ Создать тему
Опции темы

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