estratégia de alocação de alterar dinamicamente em boost :: vector e boost :: matrix
-
05-09-2019 - |
Pergunta
Em meu novo projeto que estou construindo uma gestão de dados module.I quer dar um tipo de armazenamento de modelo simples para as camadas superiores como
template<typename T>
class Data
{
public:
T getValue();
private:
boost::numeric::ublas::matrix<T> data;
}
O meu objectivo é, a mudança alocador de dados com alguns alocadores diferentes como Boost.inter alocador processo ou Boost.pool alocador (Aumente Ublas Matrix e aulas vetor leva alocador como um parâmetro do modelo) .E dar apenas uma única classe e Fábrica método para criar alocador apropriado sob a classe base virtual cover.A poderia ser doce, mas eu não poderia lidar com como usá-lo com templates.What tipo de padrões de projeto ou soluções que você oferece?
Editar:
Vou usar boost.pool e boost.shared_memory_allocator.Briefly eu quero ter diferentes classes com repartição diferente strategies.But meu ponto é partes superiores do programa deve ter nenhum conhecimento sobre desafio it.Real para mim é coletar modelo diferente classes com um classes base idêntica.
Edit: Para quem quiser usar classe matriz com alocador personalizado.
é assim:
using boost::numeric::ublas;
template<typename T, class Allocator = boost::pool_allocator<T>>
class
{
public:
matrix<T, row_major, std::vector<T,Allocator>> mData;
}
Solução
Não está claro o que você quer, mas como um tiro no escuro, é o seguinte ú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;
}
Outras dicas
Você está tentando alocadores de swap em tempo de compilação com base no tipo? Você precisa de um modelo if-else
e alguns classe alocador definições (modelo).
Se você quiser alocadores de tempo de execução, então é mais fácil:. Você colocaria a classe base (classe definição de interface) no modelo e passar subclasses apropriadas com base em qualquer condição que você precisa para cumprir