Код: Выделить всё
#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
Мобильная версия