【发布时间】:2021-01-30 20:21:27
【问题描述】:
我无法编译:
// main.cpp
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/composite_key.hpp>
#include <boost/multi_index/indexed_by.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/tag.hpp>
using namespace boost::multi_index;
struct by_attrs{};
// Generic MultiIndex that wraps boost::multi_index
template<typename Container>
class MultiIndex
{
public:
typedef typename Container::template index<by_attrs>::type::iterator attr_iterator;
template<typename FromArgs, typename ToArgs>
std::pair<attr_iterator, attr_iterator>
fetch_range(FromArgs&& from, ToArgs&& to)
const
{
return std::pair<attr_iterator, attr_iterator>(
_container.get<by_attrs>().lower_bound(from),
_container.get<by_attrs>().upper_bound(to)
);
}
private:
Container _container;
};
class Foo
{
public:
int bar() const
{
return 1;
}
};
typedef multi_index_container<
Foo,
indexed_by<
ordered_unique<
tag<by_attrs>,
composite_key<
Foo,
const_mem_fun<
Foo,
int,
&Foo::bar
>
>
>
>
> FooMultiIndexContainer;
typedef MultiIndex<FooMultiIndexContainer> FooMultiIndex;
int main()
{
FooMultiIndex foo_index;
}
错误(g++ -std=c++11 main.cpp):
In member function 'std::pair<typename Container::index<by_attrs>::type::iterator, typename Container::index<by_attrs>::type::iterator> MultiIndex<Container>::fetch_range(FromArgs&&, ToArgs&&) const': main.cpp:28:55: error: expected primary-expression before '(' token 28 | return std::pair<attr_iterator, attr_iterator>(
【问题讨论】:
-
它不会喜欢
Container::template。template是关键字,不能与作用域解析运算符一起使用 -
@Bathsheba 显然是需要的。华金解决了这个问题。
-
好吧,我并没有正式过时。对这个问题投赞成票 - 明显高于我的工资等级。
标签: c++ c++11 templates compiler-errors boost-multi-index