是否有一种方法从Boost多索引容器在c++中继承
Is there a way to inherit from Boost multi index container in C++?
我正在寻找一种方法来创建继承boost多索引容器功能的基容器类。我希望能够添加其他函数到这个基类,并创建其他类,可以使用这个基类的函数,并利用boost的多索引容器。
我试过这样做:
template < class D, E >
class BoostModelContainer : public boost::multi_index_container<D, E>
{
public:
D* AddItem( const D& item)
{
//code here
}
};
,然后创建继承基类的其他类,如:
class ExampleContainer : public BoostModelContainer< CItem,
boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<
boost::multi_index::tag<id_tag>, boost::multi_index::member< CItem, ItemId, &CItem::m_id > >,
boost::multi_index::ordered_unique<
boost::multi_index::tag<name_tag>, boost::multi_index::member< CItem, String, &CItem::m_name > >
>
>
但是这不会编译。有人有其他的想法或知道如何让它工作吗?
谢谢! !
你传递了两个模板参数,但是你的模板只接受一个。
template < class D, class E >
class BoostModelContainer : public boost::multi_index_container<D, E>
{
public:
D* AddItem( const D& item)
{
//code here
}
};
如果没有一个最小的、完整的和可验证的例子,要弄清楚你的问题到底是什么有点困难。但是rightfold的回答明确指出了你发布的代码的主要问题。本质上,您在template
声明中缺少class
关键字:
template < class D, class E >
// missing ---------^^^^^
class BoostModelContainer : public boost::multi_index_container<D, E>
{ /* ... */ };
除此之外,它应该工作得很好,如下面的完整的代码示例所示(编译良好,参见实时演示):#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <string>
template <class D, class E>
class BoostModelContainer : public boost::multi_index_container<D, E>
{
public:
D* AddItem( const D& item)
{
//code here
}
};
struct Foo
{
int id;
std::string name;
};
struct id_tag { };
struct name_tag { };
// Requires -std=c++11
using ExampleContainer = BoostModelContainer<
Foo,
boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<
boost::multi_index::tag<id_tag>, boost::multi_index::member<Foo, int, &Foo::id> >,
boost::multi_index::ordered_unique<
boost::multi_index::tag<name_tag>, boost::multi_index::member<Foo, std::string, &Foo::name> >
>
>;
// works with c++03 as well
struct ExampleContainer2 : public BoostModelContainer<
Foo,
boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<
boost::multi_index::tag<id_tag>, boost::multi_index::member<Foo, int, &Foo::id> >,
boost::multi_index::ordered_unique<
boost::multi_index::tag<name_tag>, boost::multi_index::member<Foo, std::string, &Foo::name> >
>
>
{ };
int main()
{
ExampleContainer ec1;
ExampleContainer2 ec2;
}
相关文章:
- 继承函数的重载解析
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 查找最接近的大于当前数字的数字的索引
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 在C++中调整向量中的索引
- 重载元组索引运算符-C++
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 公共与私人继承
- 为std::string的某个索引赋值
- 并行用于C++17中数组索引范围内的循环
- 继承自 std::vector<T> 和重载运算符 [] 用于自定义索引
- 是否有一种方法从Boost多索引容器在c++中继承