2013-01-22 26 views
5

Uważam, że biblioteka C++ jest "elegancka", jeśli liczba plików nagłówkowych, które należy uwzględnić, jest jak najmniejsza.Czy istnieje elegancka implementacja przydziału o stałej wielkości w C++?

Wiem, że istnieją istniejące alokatory o stałej wielkości, takie jak Loki::SmallObjectAllocator i boost::pool. Chociaż oba są doskonałe, uważam, że nie są eleganckie i niełatwo je zintegrować z projektami.

Najczęściej potrzebuję niewielkiej części biblioteki boost, ale muszę zainstalować całą bibliotekę na moim komputerze. Na przykład, jeśli chcę użyć boost :: pool, mam nadzieję, że po prostu dołączę ONE plik nagłówkowy boost_pool.h, a praca zostanie zakończona. Ponieważ myślę, że alokator o stałej wielkości nie powinien być tak zależny od zbyt wielu innych komponentów. Moim zdaniem idealny kod powinien wyglądać następująco:

#include <boost_pool.h> 

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

Czy istnieje taka biblioteka?

+3

Czy obejrzałeś [bcp] (http://www.boost.org/doc/libs/1_52_0/tools/bcp/doc/html/index.html)? Nie jest to dokładnie to samo, ale można go łatwo wykorzystać jako punkt wyjścia do umieszczenia wszystkiego w jednym nagłówku. –

+2

"Mam nadzieję, że dołączę JEDEN plik nagłówkowy' boost_pool.h' "- więc raz wykonaj pracę i umieść tam wszystkie powiązane rzeczy? Poważnie. – Xeo

+0

Dzięki. Oglądałem właśnie bcp, ale stwierdziłem, że nie jest jeszcze łatwy w użyciu. Myślę, że wzrost ma zbyt wiele niepotrzebnych zależności. – xmllmx

Odpowiedz

4

Zapraszamy do mine. Niezależnie od tego, czy jest elegancka, czy nie, możesz zdecydować. Ale to tylko jeden krótki nagłówek zależny od kilku małych standardowych nagłówków. Alokator spełnia wymagania alokatora C++ 11, które stanowią podzbiór wymagań alokatora C++ 03. Zawsze możesz dodać płytę kotła C++ 03, jeśli jej potrzebujesz.

+1

Uwaga dla użytkowników systemu Windows: zwróć uwagę, że podzielniki stanów nie działają jeszcze w trybie debugowania w programie CTP w programie Visual C++ 2012 w listopadzie. Istnieje kilka sprawdzeń debugowania, które używają 'Allocator :: construct' zamiast' std :: allocator_traits :: construct' – TemplateRex

Powiązane problemy