Насколько я понял, одной из причин использования распределителей C++ для моего собственного контейнера было бы то, что я могу разделить выделение и построение.
Теперь мне интересно, возможно ли это для std::tuples следующим образом: каждый раз, когда я создаю std::tuple, пространство резервируется, но объекты не создаются (пока). Вместо этого я могу использовать распределитель для создания i-го аргумента именно тогда, когда захочу.
Псевдокод:
struct my_struct {
const bool b; // note that we can use const
my_struct(int x) : b(x==42) {}
};
int main()
{
std::tuple<int, my_struct> t;
// the tuple knows an allocator named my_allocator here
// this allocator will force the stack to reserve space for t,
// but the contained objects are not constructed yet.
my_allocator.construct(std::get<0>(t), 42);
// this line just constructed the first object, which was an int
my_allocator.construct(std::get<1>(t), std::get<0>(t));
// this line just constructed the 2nd object
// (with help of the 1st one
return 0;
}
Одна из возможных проблем заключается в том, что распределители обычно привязаны к типу, поэтому мне нужен один распределитель для каждого типа. Другой вопрос заключается в том, должна ли память для std::tuple выделяться в куче или может работать стек. И то, и другое для меня нормально.
Тем не менее, это возможно как-то? Или, если нет, можно ли это сделать с помощью распределителя, который я напишу сам?
std::get_temporary_buffer
вместе с неинициализированными алгоритмами хранения. - person Kerrek SB   schedule 24.12.2013&*
не оценивает магию операнда ... Я также рассматривал указатели на члены, но не знал, как получить один из них для кортежей (вероятно, базовые указатели были бы правильными в тот случай). - person Kerrek SB   schedule 24.12.2013new
? Какой версии этого документа он соответствует? Я так понимаю версия 3? - person Johannes   schedule 24.12.2013