Ben*_*rst 10 c++ stl generic-collections
我正在尝试创建一个通用容器类型来提供单个公共接口,以及隐藏我正在使用的内部容器,因为它们可能会发生变化.
基本上我有插件返回项目集合,我不希望插件知道我的代码使用的容器类型.
任何人都能指出我比下面的示例代码更好的方向吗?
template<class C, typename I>
class Container
{
public:
//...
void push(const I& item)
{
if(typeid(C) == typeid(std::priority_queue<I>))
{
std::priority_queue<I>* container = (std::priority_queue<I>*)&_container;
container->push(item);
}
if(typeid(C) == typeid(std::list<I>))
{
std::list<I>* container = (std::list<I>*)&_container;
container->push_back(item);
}
else
{
//error!
}
};
private:
C _container;
//...
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我有插件返回项目集合,我不希望插件知道我的代码使用的容器类型.
让你的插件提供begin和end迭代器到他们的项目集合中,然后根据你的需要使用范围.
迭代器的最大优点是它们允许完全解耦数据的存储方式(容器)与数据的使用方式(算法;在您的情况下,是消耗插件数据的应用程序代码).
这样,您就不必关心插件如何存储他们的数据,并且插件一旦提供给您,就不必关心您对数据的处理方式.
| 归档时间: |
|
| 查看次数: |
4492 次 |
| 最近记录: |