Я пытаюсь написать общий класс распределителя, который на самом деле не освобождает память объекта, когда он свободен() 'd, но удерживает его в очереди и возвращает ранее выделенный объект, если запрашивается новый. Теперь я не могу окутать голову, как передать аргументы конструктору объекта при использовании моего распределителя (по крайней мере, не прибегая к вариационным шаблонам, то есть). Функция Alloc() я придумал, как это выглядит:Общий класс распределителей без вариационных шаблонов?
template <typename... T>
inline T *alloc(const &T... args) {
T *p;
if (_free.empty()) {
p = new T(args...);
} else {
p = _free.front();
_free.pop();
// to call the ctor of T, we need to first call its DTor
p->~T();
p = new(p) T(args...);
}
return p;
}
Тем не менее, мне нужен код, чтобы быть совместимым с сегодняшними C++ (и более ранних версий GCC, которые не поддерживают VARIADIC шаблоны). Есть ли другой способ передать произвольное количество аргументов конструктору объектов?
может повысить помощь с этим? – UncleBens
Yep, Boost.PP помогает - я думаю, что у @GMan был хороший пример где-нибудь, попытается его выкопать. –
Я делаю много материала для подготовки препроцессора, но я не думаю, что много положил на сайт. Matthieu сделал недавно, хотя: http://stackoverflow.com/questions/2597586/simplifying-templates/2598283#2598283 – GManNickG