我有一個奇怪的問題,模板和命名空間...奇怪模板命名空間問題
我有下面的代碼編譯好..
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