Сообщение Re[5]: initializer_list и неизвестная размерность от 25.11.2020 20:33
Изменено 25.11.2020 20:48 rg45
Re[5]: initializer_list и неизвестная размерность
Здравствуйте, ArtDenis, Вы писали:
AD>Если уж придирки продолжились и с учётом того, что скорее всего Tree будет использоваться только при инициализации (как тип аргумента функции инициализации), то можно уменьшить потребление памяти и количество алокаций:
AD>
Если так, то не очень понятно, для чего здесь нужен std::vector. Можно ведь полностью перейти на std::initializer_list. Ну и параметризация initializer_list двумя разными типами, с моей точки зрения выглядит как не очень оправданное усложнение кода. Ведь initializer_list — это всего лишь пара указателей для которых не нужно никаких аллокаций и копирования контента они за собой не влекут. Я бы переписал так:
AD>Если уж придирки продолжились и с учётом того, что скорее всего Tree будет использоваться только при инициализации (как тип аргумента функции инициализации), то можно уменьшить потребление памяти и количество алокаций:
AD>
AD>struct Tree
AD>{
AD> std::variant<std::vector<Tree>, std::initializer_list<int>> val_;
AD> Tree(std::initializer_list<int> children) : val_(children) {}
AD> Tree(std::initializer_list<Tree> children) : val_(children) {}
AD>};
AD>
Если так, то не очень понятно, для чего здесь нужен std::vector. Можно ведь полностью перейти на std::initializer_list. Ну и параметризация initializer_list двумя разными типами, с моей точки зрения выглядит как не очень оправданное усложнение кода. Ведь initializer_list — это всего лишь пара указателей для которых не нужно никаких аллокаций и копирования контента они за собой не влекут. Я бы переписал так:
template <typename T>
struct Tree
{
std::variant<int, std::initializer_list<Tree>> val_;
Tree() = default;
Tree(const T& v) : val_(v) {}
Tree(std::initializer_list<Tree> children) : val_(children) {}
};
Re[5]: initializer_list и неизвестная размерность
Здравствуйте, ArtDenis, Вы писали:
AD>Если уж придирки продолжились и с учётом того, что скорее всего Tree будет использоваться только при инициализации (как тип аргумента функции инициализации), то можно уменьшить потребление памяти и количество алокаций:
AD>
Если так, то не очень понятно, для чего здесь нужен std::vector. Можно ведь полностью перейти на std::initializer_list. Ну и параметризация initializer_list двумя разными типами, с моей точки зрения выглядит как не очень оправданное усложнение кода. Ведь initializer_list — это всего лишь пара указателей для которых не нужно никаких аллокаций и копирования контента они за собой не влекут. Я бы переписал так:
AD>Если уж придирки продолжились и с учётом того, что скорее всего Tree будет использоваться только при инициализации (как тип аргумента функции инициализации), то можно уменьшить потребление памяти и количество алокаций:
AD>
AD>struct Tree
AD>{
AD> std::variant<std::vector<Tree>, std::initializer_list<int>> val_;
AD> Tree(std::initializer_list<int> children) : val_(children) {}
AD> Tree(std::initializer_list<Tree> children) : val_(children) {}
AD>};
AD>
Если так, то не очень понятно, для чего здесь нужен std::vector. Можно ведь полностью перейти на std::initializer_list. Ну и параметризация initializer_list двумя разными типами, с моей точки зрения выглядит как не очень оправданное усложнение кода. Ведь initializer_list — это всего лишь пара указателей для которых не нужно никаких аллокаций и копирования контента они за собой не влекут. Я бы переписал так:
template <typename T>
struct Tree
{
std::variant<T, std::initializer_list<Tree>> val_;
Tree() = default;
Tree(const T& v) : val_(v) {}
Tree(std::initializer_list<Tree> children) : val_(children) {}
};