?
Danke fuer Deine Antwort.
Ein typedef loest aber das Problem nicht, dass der Benutzer der Bibliothek seinen eigenen Allocator einbinden koennen soll. Es geht darum, den Allocator bekannt zu machen, damit meine ich effektiv seine Interna. Denn auch wenn er sich an ein bekanntes Interface haelt, muss dennoch die Implementierung bekannt sein, damit er verwendet werden kann (etwa von Containern der STL), weil es sich um compile-time polymophie (templates) handelt (korrigiert mich, wenn ich mich irren sollte).
Zur Veranschaulichung:
ich habe folgenden Header
// Allocator.hpp
#ifdef CUSTOM_ALLOCATOR_INCLUDE
# include CUSTOM_ALLOCATOR_INCLUDE
#else
# include <memory>
namespace foo
{
typedef std::allocator<int> Allocator;
}
#endif
Jetzt kann uniform auf einen Allocator fuer einen beliebigen Typ zugegriffen werden, so z.B.
std::vector<long, foo::Allocator::rebind<long>::other>
Soweit, so gut. In diesem Beispiel kann also mit Hilfe von z.B.
#define CUSTOM_ALLOCATOR_INCLUDE <MallocAllocator.hpp>
ein anderer Allocator bekannt gemacht werden (der im namespace foo als typedef Allocator bereitsteht). Wobei das eher projektweit definiert und auch die Bibliothek damit neu kompiliert werden muss (also eher kein define in dem Sinne, sondern eine configure option oder eine Einstellung im Projekt).
Man beachte dabei, dass Allocator.hpp (der obige Header) zur Bibliothek gehoert (welche Nutzer natuerlich nicht im Code veraendern sollen), sondern nur in diesem Beispiel um einen anderen Allocator ergaenzen, der von irgendwo her kommen kann.
Aber desto mehr ich darueber nachdenke desto eher glaube ich, es geht nicht anders. Wenn dennoch Ideen vorhanden sind: immer her damit.