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

Привести указатель на класс к указателю на void - C++

Восстановить пароль Регистрация
 
 
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 10:08     Привести указатель на класс к указателю на void #1
Хай
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
47
48
49
50
51
52
53
54
#pragma once
#include "list.h";
#include "Print.h";
 
 
class Robot
{
public:
    Robot();
    ~Robot();
    template<typename T>
    void Set(T p)
    {
        if (Header == NULL)
        {
            list *l = new list(NULL,NULL,(void*)&p);
            Header = Last = l;
        }
        else
        {
            list *l = new list(NULL, Last, (void*)&p);
            Last = l;
        }
    }
    template <typename Ppr,typename Pdata>
    void PrintAll()
    {
        MyPrint *PointPrint;
        PointPrint = new Ppr;
        list *t = Header;
        while (t)
        {
            PointPrint->Pr((Pdata&)t->data);//необходимо преобразовать void * в Rose;
        }
    }
private:
 
};
 
Robot::Robot()
{
}
 
Robot::~Robot()
{
    if (Header!=NULL)
    {
        list *t = Header;
        while (t)
        {
            delete t;
        }
    }
}
list *l = new list(NULL,NULL,(void*)&p); привожу Rose к void *, но потом мне нужно сделать обратное, void * привести к Rose. Подскажите как это сделать, а то компилятор ругается. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2015, 10:08     Привести указатель на класс к указателю на void
Посмотрите здесь:

Указатель void на структуру C++
C++ Обобщенный указатель типа void
Указатель на void C++
C++ Массив по указателю void*
Арифметика указателей (указатель на void*) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
12.10.2015, 10:20     Привести указатель на класс к указателю на void #2
Что за Rose?
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 10:28  [ТС]     Привести указатель на класс к указателю на void #3
nmcf, класс
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
12.10.2015, 12:15     Привести указатель на класс к указателю на void #4
Ну приводи так же, как к void. Там есть иерархия какая-то, общий предок?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
12.10.2015, 12:17     Привести указатель на класс к указателю на void #5
Цитата Сообщение от SanychBY Посмотреть сообщение
но потом не нужно сделать
Не нужно или мне нужно?
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 12:33  [ТС]     Привести указатель на класс к указателю на void #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Не нужно или мне нужно?
Мне нужно

Добавлено через 2 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
Ну приводи так же, как к void. Там есть иерархия какая-то, общий предок?
list это класс списка, Robot работает с этим списком (добавляет новый элемент, печатает его). Объект класса Rose я помещаю в список с помощью Robot.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 12:38     Привести указатель на класс к указателю на void #7
C++
1
2
3
Rose * ptr = //что то там
void * vptr = reinterpret_cast<void*>(ptr);
Rose * nptr = reinterpret_cast<Rose*>(vptr);
а откуда вообще Rose взяля О_о ?
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
12.10.2015, 12:39     Привести указатель на класс к указателю на void #8
Почему тип элемента списка не сделать указателем на Rose? Зачем там void?

Добавлено через 46 секунд
aLarman, а простое приведение как с void и примере не сработает, что ли?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 12:52     Привести указатель на класс к указателю на void #9
Цитата Сообщение от nmcf Посмотреть сообщение
aLarman, а простое приведение как с void и примере не сработает, что ли?
ну как бе си стайл си++ стайл
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
12.10.2015, 12:58     Привести указатель на класс к указателю на void #10
void* уже не C++ стайл.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 13:15     Привести указатель на класс к указателю на void #11
nmcf, просветите что тогда должно быть?
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
12.10.2015, 13:28     Привести указатель на класс к указателю на void #12
Указатель на класс предок, наверное. Типа object в C#.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 13:56     Привести указатель на класс к указателю на void #13
nmcf, мы о разных вещах говорим, ТС попросил как перевести из конкретного типа в войд и обратно, я привел пример, а как должно быть на самом деле я не вникал
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 13:59  [ТС]     Привести указатель на класс к указателю на void #14
Цитата Сообщение от nmcf Посмотреть сообщение
Почему тип элемента списка не сделать указателем на Rose? Зачем там void?
Хочется создать что-то на подобии библиотеки. void позволяет не привязываться к типу данных.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 14:00     Привести указатель на класс к указателю на void #15
почитайте тогда про идиому TypeErasure
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 14:12  [ТС]     Привести указатель на класс к указателю на void #16
Цитата Сообщение от nmcf Посмотреть сообщение
Почему тип элемента списка не сделать указателем на Rose? Зачем там void?
Хочется создать что-то на подобии библиотеки. void позволяет не привязываться к типу данных.

Добавлено через 8 минут
Вот класс Rose
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
#include "Flower.h";
#include "Packing.h"
class Rose :public Flower
{
public:
    Rose()
    {
        cout << "Constructor Rose" << endl;
    }
    ~Rose()
    {
        cout << "Destr Rose" << endl;
    }
    Packing Pack;
};
вот list
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
#pragma once
#include <iostream>
 
 
class list
{
 
public:
    list(list *n, list *p, void *d);
    ~list();
    
    list *next;
    list *prev;
    void *data;
    void Set(list *n, list *p, void *d);
    void* Get();
    
private:
 
};
static list *Header = NULL;
static list *Last = NULL;
 
list::list(list *n, list *p, void *d)
{
    this->Set(n, p, d);
}
 
list::~list()
{
    delete data;
}
 
void list::Set(list *n, list *p, void *d)
{
    this->next = n;
    this->prev = p;
    this->data = d;
}
void * list::Get()
{
    return this->data;
}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename Ppr,typename Pdata>
    void PrintAll()
    {
        MyPrint *PointPrint;
        PointPrint = new Ppr;
        list *t = Header;
        while (t)
        {
            PointPrint->Pr((Pdata&)t->data);//необходимо преобразовать void * в Rose;
        }
    }
как то надо просто прописать правильное преобразование
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
12.10.2015, 14:18     Привести указатель на класс к указателю на void #17
Что мешает сделать класс list шаблонным?
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 14:19  [ТС]     Привести указатель на класс к указателю на void #18
castaway, как иерархия классов относится к теме преобразования?
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
12.10.2015, 14:21     Привести указатель на класс к указателю на void #19
Цитата Сообщение от SanychBY Посмотреть сообщение
castaway, как иерархия классов относится к теме преобразования?
Никак. Мне просто интересно почему ты не хочешь решить проблему по другому.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2015, 14:24     Привести указатель на класс к указателю на void
Еще ссылки по теме:

C++ Как лучше присвоить указателю на указатель адрес массива
Привести string к void* C++
C++ Указатель типа void c++

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

Или воспользуйтесь поиском по форуму:
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 14:24  [ТС]     Привести указатель на класс к указателю на void #20
Цитата Сообщение от castaway Посмотреть сообщение
Сообщение от SanychBY
castaway, как иерархия классов относится к теме преобразования?
Никак. Мне просто интересно почему ты не хочешь решить проблему по другому.
Цитата Сообщение от castaway Посмотреть сообщение
Никак. Мне просто интересно почему ты не хочешь решить проблему по другому.
Просто не вижу как это исправит проблему. Поле void * data все равно не исчезнет и придется приводить.
Yandex
Объявления
12.10.2015, 14:24     Привести указатель на класс к указателю на void
Ответ Создать тему
Опции темы

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