Frage

In meinem neuen Projekt i ein Datenmanagement am Bau module.I will einen einfachen Vorlage Speichertyp obere Schichten wie

geben
template<typename T>
class Data
{
 public:
  T getValue();
 private:

 boost::numeric::ublas::matrix<T> data;
}

Mein Ziel ist es, zu allocator von Daten mit einigen verschiedenen Verteilern wie Boost.inter Prozess allocator oder Boost.pool allocator zu ändern (Boost Ublas Matrix und Vektor-Klassen nehmen allocator als Template-Parameter) .Und gibt nur eine einzige Klasse und Werk Verfahren unter Klasse Deckel virtueller Basis geeigneten allocator zu schaffen süß sein könnte, aber ich konnte nicht damit umgehen, wie es zu verwenden, um mit templates.What Art von Design Patterns oder Lösungen bieten Sie an?

Edit:

verwende ich boost.pool und boost.shared_memory_allocator.Briefly ich verschiedene Klassen haben will mit verschiedener Zuordnung strategies.But mein Punkt Oberteil Programm sollte für mich kein Wissen über it.Real Herausforderung hat sie andere Vorlage sammeln Klassen mit identischer Basisklasse.

Edit: Für jemanden, der Matrix-Klasse mit benutzerdefinierten allocator verwenden möchten.

Es ist wie folgt:

 using boost::numeric::ublas;

    template<typename T, class Allocator = boost::pool_allocator<T>>
    class
    {      
      public:
      matrix<T, row_major, std::vector<T,Allocator>> mData;
    }
War es hilfreich?

Lösung

Es ist nicht klar, was Sie wollen, aber als Schuss im Dunkeln, ist die folgende hilfreich?

template<typename T>
class IData
{
 public:
  virtual T getValue() = 0;
  virtual ~IData() {}
};

template<typename T, typename Allocator=std::allocator<T> >
class Data : public IData<T>
{
 public:
  virtual T getValue();
 private:

 boost::numeric::ublas::matrix<T, Allocator> data;
}

Andere Tipps

Versuchen Sie, Zuweiser bei der Kompilierung auf Typ basiert zu tauschen? Sie würden eine if-else Vorlage benötigen und einige allocator Klasse (Template) Definitionen.

Wenn Sie Runtime Verteilern wollen, dann ist es einfacher. Sie die Basisklasse (Interface Definition-Klasse) in der Vorlage setzen würde und entsprechende Subklassen passieren basierend auf, was Bedingung müssen Sie erfüllen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top