Я присваиваю значения этой базовой структуре
Код: Выделить всё
#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]