Minimal vector initialization

I'm proposing a small boost library: struct minimal_init {}; template <typename T> struct minimal_constructible : public T { minimal_constructible() : T(minimal_init()) {} }; The purpose of this is to enable vectors of simple structs (containing only POD members) to have resize calling a do-nothing constructor. Let's say that I have a loop that I'd like to calculate in parallel: struct Dummy { Dummy(int a_=0) : a(a_) {} Dummy(const minimal_init &) {} // Without a v-table, this shouldn't need to touch any part of the created object? int a; }; void foo() { #define N 100 std::vector<minimal_constructible<Dummy> > data; data.resize(N); #pragma omp parallel for for (size_t i=0;i<N;++i) data[i].a=i; } Using reserve+push_back is unlikely to create a properly sorted vector. Ideally, we'd add a resize member to std::vector that takes a template T2 that is different from T, just like emplace_back does, but that won't happen soon. I'll probably want to add a few things to make minimal_constructible<T> behave more like a T, but I really liked the idea of a five line boost library ;) Good idea, or not? Thanks in advance, Henrik
participants (1)
-
Henrik Vallgren