Для чего этот вариант хранилища использует буферный массив?C++

Программы на C++. Форум разработчиков
Anonymous
 Для чего этот вариант хранилища использует буферный массив?

Сообщение Anonymous »

Я вижу этот фрагмент кода для реализации типа C++, подобного std::variant. Этот класс используется в качестве хранилища вариантов.
Что хранит буферный массив?

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

alignas(Types...) unsigned char buffer[sizeof(LargestT)];
Я все еще учусь, но, насколько я понимаю, возможно, неправильно, он хранит текущий самый большой тип списка пакетов шаблонов.

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

#include  // for std::launder()
template
class VariantStorage {
using LargestT = LargestType;
// What stores the following buffer array?
alignas(Types...) unsigned char buffer[sizeof(LargestT)];
unsigned char discriminator = 0;
public:
unsigned char getDiscriminator() const {
return discriminator;
}
void setDiscriminator(unsigned char d) {
discriminator = d;
}
void* getRawBuffer() {
return buffer;
}
const void* getRawBuffer() const {
return buffer;
}
template
T* getBufferAs() {
return std::launder(reinterpret_cast(buffer));
}
template
T const* getBufferAs() const {
return std::launder(reinterpret_cast(buffer));
}
};
Кто-нибудь может объяснить мне, какова цель этой строки кода?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -array-for

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