我想寫一個通用的分配器類,它不釋放對象的內存時,它是免費的()'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)的兼容。是否有任何其他方式去傳遞任意數量的參數給對象構造函數?
可能促進幫助的嗎? – UncleBens 2010-04-08 14:07:59
是的,Boost.PP幫助 - 我認爲@GMan有一個很好的例子,會嘗試挖掘它。 – 2010-04-08 14:10:02
我做了很多Boost預處理器的東西,但是我不認爲我在網站上投入了太多。儘管Matthieu最近做了一個:http://stackoverflow.com/questions/2597586/simplifying-templates/2598283#2598283 – GManNickG 2010-04-08 15:06:50