powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получение одного из родителей по void*
8 сообщений из 8, страница 1 из 1
Получение одного из родителей по void*
    #34335894
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Добрый ALL!
Что имею:
Класс Х наследник от 2-х родителей(А,В). Ещё Точнее А-класс, В-структура

Что хочу:
Верунть по viod* структуру B из класса

Попытка писанины:

void* Х::GetData()
{
return dynamic_cast<В>(this);
}

получаю:
...\vmtype.cpp(29): error C2680: 'В' : invalid target type for dynamic_cast

Сижу туплю. Букварь дома...

Спасибо
...
Рейтинг: 0 / 0
Получение одного из родителей по void*
    #34335923
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант решения
B* Х::GetDataВ()
{
return this;
}
void* X::GetData()
{
return GetDataB();
}

Если есть более красивые варианты буду признателен.
...
Рейтинг: 0 / 0
Получение одного из родителей по void*
    #34336372
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
return dynamic_cast< В* >(this);
Или просто return this;.
...
Рейтинг: 0 / 0
Получение одного из родителей по void*
    #34336754
Фотография Termi_uc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько понял вопрос, всё делается очень просто. И не надо никаких функций писать.

B * _B = new B();
A * _A = _B;

Наследники, поддерживают на 100% структуру предка, поэтому экзеспляр класса B может быть приведён к структуре A .
...
Рейтинг: 0 / 0
Получение одного из родителей по void*
    #34336769
Фотография Termi_uc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка:
Код: plaintext
1.
2.
3.
4.
 class X : public A, public B {};

 X * _X = new X();
 A * _A = _X;
 B * _B = _X;
...
Рейтинг: 0 / 0
Получение одного из родителей по void*
    #34337173
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Termi_ucНасколько понял вопрос, всё делается очень просто. И не надо никаких функций писать.

B * _B = new B();
A * _A = _B;

Наследники, поддерживают на 100% структуру предка, поэтому экзеспляр класса B может быть приведён к структуре A .

Это УГУ. но у меня немного другой контекст применения.

В хитрую функцию я должен передать по viod* структуру В
Иеререхия
Есть Класс А - Папа(имеет void* GetData())
Есть Класс Х public A, protected B

По плану в Х перегружаю GetData() чтоб он выдавал указатель на B. (Его-то и спрашивал)

хитрая функция SuperFunc делает так:

DoMyBest(void* pData)
{

}
void SuperFunc(A* pData)
{
...
DoMyBest(A->GetData());
...
}
...
Рейтинг: 0 / 0
Получение одного из родителей по void*
    #34337233
vanoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мама!!!!!!!
Надо поспать
ранее
Вариант решения
B* Х::GetDataВ()
{
return this;
}
void* X::GetData()
{
return GetDataB();
}

сейчас
void* X::GetData()
{
B* retval=this;
return retval;
}

ps как стыдно
...
Рейтинг: 0 / 0
Получение одного из родителей по void*
    #34338328
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну уж ежели совсем безопасно
return static_cast<B*>(this);
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получение одного из родителей по void*
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]