Dinamicamente cambiare strategia di allocazione in spinta :: vector e boost :: matrice
-
05-09-2019 - |
Domanda
Nel mio nuovo progetto Sto costruendo un data management module.I vuole dare un semplice tipo di archiviazione modello per strati superiori come
template<typename T>
class Data
{
public:
T getValue();
private:
boost::numeric::ublas::matrix<T> data;
}
Il mio obiettivo è, di cambiare allocatore di dati con alcuni ripartitori diversi, come Boost.inter processo allocatore o Boost.pool allocatore (Boost uBLAS Matrix e classi vettore prende allocatore come parametro di template) .E dare solo una singola classe e fabbrica metodo per creare adeguate allocatore sotto cover.A classe base virtuale potrebbe essere dolce ma io non poteva gestire come usarlo con templates.What tipo di modelli o soluzioni progettuali offrite?
Modifica:
userò boost.pool e boost.shared_memory_allocator.Briefly voglio avere classi differenti con diversa ripartizione strategies.But mio punto è parti superiori del programma dovrebbero avere alcuna conoscenza di sfida it.Real per me è quello di raccogliere modello diverso corsi con classi di base identici.
Modifica: Per chi vuole utilizzare classe Matrix con allocatore personalizzato.
è in questo modo:
using boost::numeric::ublas;
template<typename T, class Allocator = boost::pool_allocator<T>>
class
{
public:
matrix<T, row_major, std::vector<T,Allocator>> mData;
}
Soluzione
Non è chiaro ciò che si vuole, ma come un salto nel buio, è il seguente 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;
}
Altri suggerimenti
Stai cercando di scambiare ripartitori in fase di compilazione in base al tipo? Avreste bisogno di un modello if-else
e alcune definizioni di classe allocatore (modello).
Se si desidera ripartitori di runtime, quindi è più facile:. Che ci si mette la classe di base (interfaccia di classe definizione) nel template e passare sottoclassi appropriate in base a qualsiasi condizione è necessario soddisfare