我试图利用boost-multiindex
容器进行快速和位置访问。同时提供std::vector
和std::map
之类的内容。我构建一个简单的boost-multiindex
类没有问题。它工作得非常整洁。
问题出现了,因为我试图将我的玩具示例传递给我的真实代码。我计划在通用树结构中使用boost-multiindex
,其中可以设置要存储的值的类型T
以及用于存储指向节点Node
的指针的容器。同时。
由于某些原因,无论我尝试过什么,注释代码都不会运行。我也无法理解编译器错误消息。 : - (
我想这应该是一个简单的问题,但我不知道该怎么做。
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/sequenced_index.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/timer/timer.hpp>
struct Node {
const std::string& name() const { return mName; }
std::string mName;
};
// @brief Knoten des allgemeinen Baums, welcher Werte vom Typ T enthält.
template<typename T, template <typename Node = GenericTreeNode<T>> typename C>
struct GenericTreeNode {
typedef GenericTreeNode<T, C> self_type;
typedef T value_type;
typedef C<self_type> cont_type;
const std::string& name() const { return name_; }
std::string name_;
value_type value_;
cont_type kids_;
};
template<typename Node>
using BoostCont =
boost::multi_index::multi_index_container<
Node*,
boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<
boost::multi_index::const_mem_fun<Node, const std::string&, &Node::name>
>,
boost::multi_index::sequenced<>
>
>;
int main() {
// Does not not compile!
// GenericTreeNode<int, BoostCont> node;
// node.kids_.insert(new GenericTreeNode<int, BoostCont>());
// Compiles
BoostCont<Node> test;
test.insert(new Node{ "B" });
test.insert(new Node{ "A" });
test.insert(new Node{ "C" });
for (auto iter : test) {
std::cout << iter->mName << std::endl;
}
}
我会收到错误消息:
error C2039: "name": Is not an element of "GenericTreeNode<int,BoostCont>"
error C2065: "name": undeclared identifier
error C2975: "PtrToMemberFunction": Invalid template argument for "boost::multi_index::const_mem_fun", constant compile time expression expected