2013-01-22 14 views
5

Penso che una libreria C++ sia "elegante" se il numero di file di intestazione che devono essere inclusi è il meno possibile.Esiste un'elegante implementazione C++ di allocatore a dimensione fissa?

So che esistono allocatori di dimensioni fisse esistenti come Loki::SmallObjectAllocator e boost::pool. Sebbene entrambi siano eccellenti, penso che non siano eleganti e non facili da integrare perfettamente nei progetti.

La maggior parte delle volte, ho solo bisogno di una piccola parte della libreria boost, ma devo installare l'intera libreria sul mio computer. Ad esempio, se desidero utilizzare boost :: pool, spero di includere solo il file di intestazione ONEboost_pool.h e il lavoro è stato completato. Perché penso che un allocatore di dimensioni fisse non dovrebbe essere così dipendente da troppi altri componenti. A mio parere, il codice ideale dovrebbe essere simile al seguente:

#include <boost_pool.h> 

int main() 
{ 
    boost::pool<int> p; 
    int* v = p.allocate(); 
} 

Esiste una tale libreria?

+3

Hai guardato [bcp] (http://www.boost.org/doc/libs/1_52_0/tools/bcp/doc/html/index.html)? Non esattamente la stessa cosa, ma può essere facilmente utilizzato come punto di partenza per spostare tutto in un'unica intestazione. –

+2

"Spero di includere solo un file di intestazione' boost_pool.h' "- quindi, fai il lavoro una volta e metti tutte le cose correlate lì dentro? Sul serio. – Xeo

+0

Grazie. Ho visto bcp solo ora, ma trovarlo non è ancora facile da usare. Penso che la spinta abbia troppe dipendenze non necessarie. – xmllmx

risposta

4

Sei il benvenuto a mine. Che sia elegante o meno, puoi decidere. Ma è solo una breve intestazione che dipende solo da un paio di piccoli header standard. L'allocatore soddisfa i requisiti di allocatore C++ 11, che sono un sottoinsieme dei requisiti di allocatore C++ 03. È sempre possibile aggiungere il piatto caldaia C++ 03 se necessario.

+1

Nota per utenti Windows: si noti che gli assegnatori di stato non funzionano ancora in modalità di debug in Visual C++ 2012 CTP di novembre. Esiste un controllo di debug che utilizza 'Allocator :: construct' piuttosto che' std :: allocator_traits :: construct' – TemplateRex

Problemi correlati