J'essaye d'écrire une classe allocator générique qui ne libère pas réellement la mémoire d'un objet quand elle est libre() mais la garde dans une file d'attente et retourne un objet précédemment assigné si un nouveau est demandé. Maintenant, ce que je ne peux pas comprendre est de savoir comment passer des arguments au constructeur de l'objet lorsque j'utilise mon allocateur (du moins sans avoir recours à des modèles variés, c'est-à-dire). La fonction alloc() je suis venu avec se présente comme suit:Classe d'allocateur générique sans modèles variadiques?
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;
}
encore, je dois le code pour être compatible avec (et les anciennes versions de GCC qui ne prennent pas en charge les modèles variadique) d'aujourd'hui C++. Existe-t-il un autre moyen de transmettre une quantité arbitraire d'arguments au constructeur d'objets?
peut stimuler aider? – UncleBens
Oui, Boost.PP aide - je pense que @GMan a eu un bel exemple quelque part, va essayer de le déterrer. –
Je fais beaucoup de choses sur le préprocesseur Boost, mais je ne pense pas avoir mis beaucoup sur le site. Matthieu en a fait un récemment, cependant: http://stackoverflow.com/questions/2597586/simplifying-templates/2598283#2598283 – GManNickG