2009-04-07 2 views
0

В моем новом проекте я строй управления данными module.I хочу дать простой тип хранения шаблонов для верхних слоев, какДинамического изменения стратегии распределения в повышении :: вектор и повышение :: матрицы

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

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

Моих Цель состоит в том, чтобы сменить распределитель данных с помощью некоторых разных распределителей, таких как распределитель процесса Boost.inter или распределитель Boost.pool (Boost Ublas Matrix и векторные классы принимают распределитель как параметр шаблона). И дайте только один класс и метод Factory для создания соответствующих распределитель под обложкой. Виртуальный базовый класс может быть приятным, но я не мог справиться с тем, как его использовать с шаблонами. Какие шаблоны дизайна или решения вы предлагаете?

Edit:

Я буду использовать boost.pool и boost.shared_memory_allocator.Briefly я хочу иметь различные классы с различным распределением strategies.But моей точкой является верхней частью программы не должен иметь никаких знаний о it.Real вызова для меня нужно собирать разные классы шаблонов с одинаковыми базовыми классами.

Редактировать: Для тех, кто хочет использовать класс матрицы с пользовательским распределителем.

это так:

using boost::numeric::ublas; 

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

ответ

0

Непонятно, что вы хотите, но как выстрел в темноте, является следующим полезным?

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

Извините, я признаю, что это было не ясно, но ваш метод возможен для меня. – Qubeuc

+0

Прохладный :) рад помочь –

0

Вы пытаетесь поменять распределители во время компиляции на основе типа? Вам понадобится шаблон if-else и некоторые определения класса (шаблона) распределителя.

Если вам нужны распределители времени выполнения, то это проще: вы бы поместили базовый класс (класс определения интерфейса) в шаблон и передали соответствующие подклассы на основе любого условия, которое вам нужно выполнить.

 Смежные вопросы

  • Нет связанных вопросов^_^