Как присвоить значения базовой структуре, которые не сбрасываются при преобразовании в общие указателиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как присвоить значения базовой структуре, которые не сбрасываются при преобразовании в общие указатели

Сообщение Anonymous »

По сути, у меня есть базовая структура, содержащая значения в виде Shared_ptr
Я присваиваю значения этой базовой структуре

Код: Выделить всё

#include
#include

enum class Enums
{
A,
B,
UNKNOWN,
};

struct BaseStruct
{
Enums Type = Enums::UNKNOWN;
};

struct DerivedStruct : public BaseStruct
{
int MoreData = 0;
};

struct AnotherDerivedStruct : public BaseStruct
{
char different_Data;
};
Мне нужно понизить эту базовую структуру, чтобы назначить больше значений.
Я не могу использовать static_pointer_cast напрямую, так как мне нужно сначала использовать make_shared () или make_shared(), поскольку структура может быть производной от различных структур.
так что

Код: Выделить всё

int main()
{
auto BaseToken = std::make_shared();

BaseToken->Type = Enums::B;

bool ComplicatedLogicalLogic = false;

if (ComplicatedLogicalLogic)
{
BaseToken = std::make_shared();
auto DerivedToken = std::static_pointer_cast
(BaseToken);
DerivedToken->Type; //this will be undefined
}
else
{
BaseToken = std::make_shared();
auto DerivedToken = std::static_pointer_cast
(BaseToken);

/// The value is reset so this condition is never met
if (DerivedToken->Type == Enums::B)
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79135604/how-to-assign-values-to-a-base-struct-that-arent-reset-when-downcasted-as-share[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»