Question

Dans mon nouveau projet, je fais construire une gestion des données module.I veulent donner un type simple de stockage de modèle à couches supérieures comme

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

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

Mon but est de changer allocateur de données avec des différents processus comme allocataires Boost.inter allocateur ou Boost.pool allocateur (Boost uBLAS des classes Matrix et prend vecteur allocateur comme paramètre de modèle) .Et donner une seule classe et usine méthode pour créer allocateur approprié à la classe de base virtuelle couvercle.Un pourrait être doux, mais je ne pouvais pas gérer comment l'utiliser avec templates.What type de modèles de conception ou de solutions proposez-vous?

Edit:

Je vais utiliser boost.pool et boost.shared_memory_allocator.Briefly je veux avoir différentes classes avec répartition différente strategies.But mon point est partie supérieure du programme ne devrait pas avoir connaissance de défi it.Real pour moi est de collecter modèle différent classes avec une classe de base identiques.

Edit: Pour ceux qui veulent utiliser la classe de matrice avec allocateur personnalisé.

il est comme ceci:

 using boost::numeric::ublas;

    template<typename T, class Allocator = boost::pool_allocator<T>>
    class
    {      
      public:
      matrix<T, row_major, std::vector<T,Allocator>> mData;
    }
Était-ce utile?

La solution

On ne sait pas ce que vous voulez, mais comme un coup de feu dans l'obscurité, est la suivante utile?

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;
}

Autres conseils

Vous essayez d'échanger allocateurs au moment de la compilation en fonction du type? Vous auriez besoin d'un modèle de if-else et quelques définitions de classe allocateur (modèle).

Si vous voulez allocateurs d'exécution, il est plus facile. Vous mettiez la classe de base (interface classe de définition) dans le modèle et passer les sous-classes appropriées en fonction de quelle condition vous devez remplir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top