我有一个奇怪的问题,模板和命名空间...奇怪模板命名空间问题
我有下面的代码编译好..
using namespace boost::multi_index;
template < typename OT, typename KT, KT (OT::* KM)() const, typename KC, typename CMP >
class OrderBook
{
public:
OrderBook() {}
~OrderBook() {}
typedef multi_index_container<
OT,
indexed_by<
ordered_unique<
const_mem_fun< OT, KT, KM >,
KC
>,
ordered_unique<
identity<OT>,
CMP
>
>
> Container;
typedef typename Container::template nth_index<0>::type index_0;
typedef typename Container::template nth_index<1>::type index_1;
typedef typename index_0::const_iterator const_iterator_0;
typedef typename index_1::const_iterator const_iterator_1;
const_iterator_0 begin0() const { return _container.get<0>().begin(); }
const_iterator_0 end0() const { return _container.get<0>().end(); }
public:
Container _container;
};
然而,由于命名空间冲突时我插入此代码到另一个项目,我必须有...(请注意如何我不得不删除使用namespace boost::multi_index
的和手动指定需要的地方
template < typename OT, typename KT, KT (OT::* KM)() const, typename KC, typename CMP >
class OrderBook
{
public:
OrderBook() {}
~OrderBook() {}
typedef boost::multi_index::multi_index_container<
OT,
boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<
boost::multi_index::const_mem_fun< OT, KT, KM >,
KC
>,
boost::multi_index::ordered_unique<
boost::multi_index::identity<OT>,
CMP
>
>
> Container;
typedef typename Container::template nth_index<0>::type index_0;
typedef typename Container::template nth_index<1>::type index_1;
typedef typename index_0::const_iterator const_iterator_0;
typedef typename index_1::const_iterator const_iterator_1;
const_iterator_0 begin0() const { return _container.get<0>().begin(); }
const_iterator_0 end0() const { return _container.get<0>().end(); }
public:
Container _container;
};
这给了我牛逼他跟随g ++的错误。
In member function 'typename boost::multi_index::multi_index_container<OT, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::const_mem_fun<OT, KT, KM>, KC, mpl_::na>, boost::multi_index::ordered_unique<boost::multi_index::identity<Value>, CMP, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<_CharT> >::nth_index<0>::type::const_iterator OrderBook<OT, KT, KM, KC, CMP>::begin0() const':
error: expected primary-expression before ')' token
In member function 'typename boost::multi_index::multi_index_container<OT, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::const_mem_fun<OT, KT, KM>, KC, mpl_::na>, boost::multi_index::ordered_unique<boost::multi_index::identity<Value>, CMP, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<_CharT> >::nth_index<0>::type::const_iterator OrderBook<OT, KT, KM, KC, CMP>::end0() const':
error: expected primary-expression before ')' token
对不起,长的错误消息,我没有考虑清洁起来,但我想我最好还是留在他们的情况下完整,我删除的东西是至关重要的。
我想这...
typedef typename Container::template boost::multi_index::nth_index<0>::type index_0;
typedef typename Container::template boost::multi_index::nth_index<1>::type index_1;
,它只是由G ++甚至茜草:(
任何想法?
您正在使用哪种版本的g ++?与VC++ 2005 BTW完美兼容的例子。 – 2010-01-29 14:39:17
对于依赖名称,VC8相当宽松,您不必在标准要求您输入的'typename'和'template'前缀。 – 2010-01-29 14:41:16
这是一个相当古老的gcc 4.1.2。 – ScaryAardvark 2010-01-29 16:39:52