Я не понимаю, почему нет optional tuple
, и я имею в виду, что-то вроде этого; optional<int,string,char>
, который объединил бы optional int
, optional string
и optional char
.Создайте дополнительный набор
Вы можете думать о нем, как оптимизированной std::tuple<boost::optional<T>...>
где booleans
используется optionals
бы все вместе в конце structure
для того, чтобы упаковать его, или даже лучше, хранить в BitSet.
Это может уменьшить память структуры много, а также более элегантна:
std::tuple<boost::optional<int>,boost::optional<string>,boost::optional<char>>
VS
optional<int,string,char>
Я могу придумать способ сделать это, используя реализацию boost::optional
и variadic templates
, но прежде чем начать это, я хотел бы знать, если это ag ood идея, что было бы лучшим способом реализации этого, каковы трудности, с которыми мне пришлось столкнуться?
EDIT:
В принципе, почему мне не нравится std::tuple<boost::optional<T>...>;
Так как optional<T>
является объединением T
и bool
:
Новая структура может сохранить много памяти!
Я знаю, что вы говорите об ускорении, но все же разрабатываются типы словаря C++ 17 «словарь». Вы должны отправить предложение в комитет C++, если вы думаете, что std :: optional может использовать этот код – KABoissonneault
. Кроме того, возможно, вы могли бы определить свой собственный «необязательный» псевдоним шаблона вместе с заводской функцией для объявления и создания вашего варианта с опцией. – KABoissonneault
@ KABoissonneault Я думал о чем-то подобном, но я не уверен, что не будет никаких проблем с «необязательными» данными о движении. –