0

在我的新项目中,我正在构建一个数据管理模块。我想为上层提供一个简单的模板存储类型,例如

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

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

我的目标是,用一些不同的分配器更改数据分配器,例如 Boost.inter 进程分配器或 Boost.pool 分配器(Boost Ublas 矩阵和向量类将分配器作为模板参数)。并且只提供一个类和工厂方法来创建适当的分配器。虚拟基类可能很甜蜜,但我无法处理如何将它与模板一起使用。你们提供什么样的设计模式或解决方案?

编辑:

我将使用 boost.pool 和 boost.shared_memory_allocator。简而言之,我想拥有具有不同分配策略的不同类。但我的观点是程序的上层部分应该对此一无所知。对我来说真正的挑战是收集不同的模板类相同的基类。

编辑:对于想要将矩阵类与自定义分配器一起使用的人。

是这样的:

 using boost::numeric::ublas;

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

2 回答 2

0

您是否尝试在编译时根据类型交换分配器?您需要一个if-else模板和一些分配器类(模板)定义。

如果您想要运行时分配器,那就更容易了:您可以将基类(接口定义类)放在模板中,并根据您需要满足的任何条件传递适当的子类。

于 2009-04-07T18:43:41.090 回答
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;
}
于 2009-04-07T19:23:40.197 回答