Pregunta

En mi nuevo proyecto estoy construyendo una gestión de datos module.I quiere dar un simple tipo de almacenamiento de la plantilla a las capas superiores como

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

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

Mi objetivo es, para cambiar asignador de datos con algunos asignadores diferentes como asignador Boost.inter proceso o asignador Boost.pool (Boost Ublas Matrix y clases de vectores toma asignador como un parámetro de plantilla) .Y dar solamente una única clase y Fábrica método para crear asignador apropiado bajo cover.A clase base virtual podría ser dulce, pero yo no podía manejar cómo usarlo con templates.What tipo de patrones de diseño o soluciones que ofrecen?

Editar:

voy a utilizar boost.pool y boost.shared_memory_allocator.Briefly quiero tener diferentes clases con diferentes asignación strategies.But mi punto es partes superiores del programa deben tener ningún conocimiento acerca de desafío it.Real para mí es recoger una plantilla diferente clases con un clases base idénticas.

Editar: Para quien quiera utilizar la clase matriz con asignador personalizado.

es la siguiente:

 using boost::numeric::ublas;

    template<typename T, class Allocator = boost::pool_allocator<T>>
    class
    {      
      public:
      matrix<T, row_major, std::vector<T,Allocator>> mData;
    }
¿Fue útil?

Solución

No está claro lo que quiere, sino como un tiro en la oscuridad, es el siguiente útil?

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

Otros consejos

¿Está tratando de cambiar los asignadores en tiempo de compilación en base al tipo? Se necesitaría una plantilla if-else y algunas definiciones (plantilla) de clase asignador.

Si desea asignadores de tiempo de ejecución, entonces es más fácil:. Que había puesto la clase base (interfaz de clase definición) en la plantilla y pasar subclases apropiadas sobre la base de cualquier condición que necesita para cumplir

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top