在我的新项目中,我正在构建一个数据管理模块。我想给上层提供一个简单的模板存储类型,如
template<typename T>
class Data
{
public:
T getValue();
private:
boost::numeric::ublas::matrix<T> data;
}
我的目标是,用一些不同的分配器来改变数据的分配器,比如Boost.inter进程分配器或Boost.pool分配器(Boost Ublas Matrix和vector类将allocator作为模板参数)。并且只给出一个类和工厂在封面下创建适当的分配器的方法。虚拟基类可能很好但我无法处理如何将它与模板一起使用。您提供了哪种设计模式或解决方案?
编辑:
我将使用boost.pool和boost.shared_memory_allocator.Briefly我希望有不同的类具有不同的分配策略。但我的观点是程序的上半部分应该对它没有任何了解。我的挑战是收集不同的模板具有相同基类的类。
编辑: 对于想要将矩阵类与自定义分配器一起使用的人。
就像这样:
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 :(得分:0)
您是否尝试在编译时基于类型交换分配器?您需要if-else
模板和一些分配器类(模板)定义。
如果你想要运行时分配器,那么它就更容易了:你将基类(接口定义类)放在模板中,并根据你需要满足的条件传递适当的子类。
答案 1 :(得分: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;
}