Балансировать безопасность типа, гибкость времени выполнения и производительность в контейнерах C ++ [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Балансировать безопасность типа, гибкость времени выполнения и производительность в контейнерах C ++ [закрыто]

Сообщение Anonymous »

Я читал эту статью о передовых практиках C ++, и это заставило меня задуматься о безопасности типа и гибкости времени выполнения, я придумал этот пример: < /p>

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

#include 
#include 
#include 
#include 

template 
class mycontainer {
static_assert(std::is_default_constructible_v, "not constructible");
std::vector data;

public:
template 
void emplace(Args&&... args) {
static_assert(sizeof...(Args) > 0, "you must provide an argument");
data.emplace_back(std::make_unique(std::forward(args)...));
}

T* get(size_t index) {
if (index >= data.size()) return nullptr;
return data[index].get();
}
};

int main() {
mycontainer container;
container.emplace(42);

auto value = container.get(0);
if (value) std::cout 
Можно ли улучшить этот дизайн? Br />, например, можно было бы исключить проверки времени выполнения полностью и полагаться исключительно на гарантии времени компиляции без потери гибкости? std :: ulious_ptr 
для каждого элемента добавляет накладные расходы на распределение кучи, будет ли настраиваемым выбором или оптимизацией небольшого буфера лучшим выбором для производительности без ущерба для безопасности? Использование вариантов?
Если бы я хотел, чтобы контейнер поддерживал различные типы (гетерогенные объекты), это нарушит гарантии безопасности типа? Или есть способ сделать это при обеспечении безопасности и эффективности? и производительность, как бы вы подходили к такому дизайну?


Подробнее здесь: https://stackoverflow.com/questions/793 ... containers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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