Динамически менять стратегию распределения в boost :: vector и boost :: matrix - PullRequest
0 голосов
/ 07 апреля 2009

В моем новом проекте я создаю модуль управления данными. Я хочу дать простой тип хранилища шаблонов верхним уровням, таким как

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

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

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

Edit:

Я буду использовать boost.pool и boost.shared_memory_allocator. Вкратце я хочу иметь разные классы с разными стратегиями распределения. Но моя точка зрения заключается в том, что верхние части программы не должны знать об этом. Реальная задача для меня - собрать разные шаблоны. классы с одинаковыми базовыми классами.

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

это так:

 using boost::numeric::ublas;

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

Ответы [ 2 ]

0 голосов
/ 07 апреля 2009

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

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 голосов
/ 07 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...