Есть, например, такая структура:
struct FooStructure
{
WORD Field1;
WORD Field2;
WORD Field3;
}
Все поля в ней имеют размер по 2 байта. Как поступить, если в процессе выполнения программы выяснилось, что для хранения значения в поле Field2
не хватает места и нужно не 2, а 4 байта (DWORD
). При этом использовать DWORD
сразу с запасом на такие случаи не вариант, т.к. данные, которые потом разбиваются на поля структуры, идут в памяти последовательно.
Если говорить конкретно, задача разобрать таблицы метаданных управляемых модулей .NET. Поскольку в этих таблицах в большом количестве используются индексы объектов разного типа в других потоках метаданных, а эти индексы могут быть 2х или 4х байтными, использовать структуры для обработки метаданных проблематично.
Тут я бы посоветовал 2 варианта.
1: Шаблоны - тут я думаю все понятно, какой тип нужен - такой и пихайте
template<typename T1, typename T2, typename T3>
struct FooStructure
{
T1 Field1;
T2 Field2;
T3 Field3;
}
2: Указатели - что вам угодно - аллоцируйте память под это туда и пихайте)))
struct FooStructure
{
void* Field1;
void* Field2;
void* Field3;
}
3: все поля сделать union
Union t {
Type1 t1,
Type2 t2
};
C++17:
Все поля сделать std::variant
Все поля сделать сделать std::any
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Имеется сервер и видео на немБэкенд представлен библиотекой Flask на Python
написал небольшой скрипт на js в котором небольшой круг описывает собой окружность, но на уровне точки окружности по оси x, круг начинает увеличивать...
Есть отсортированный по полю "продукт" список объектов следующего вида: