标题: [GCC][C++] 郁闷,GCC 的 ISO C++ 兼容性也太差了
[打印本页]
作者: asbai
时间: 2006-6-12 16:20
标题: [GCC][C++] 郁闷,GCC 的 ISO C++ 兼容性也太差了
以下代码居然无法编译通过:
template<class _MSGTYPE,
class _CONTAINER = std::vector<_MSGTYPE>,
class _COMP = std::less<typename _CONTAINER::value_type> >
class pri_msg_queue : public std::priority_queue<_MSGTYPE, _CONTAINER, _COMP>
{
public:
const value_type& front() const {return top();}
void pop_front() {pop();}
void push_back(const value_type& iMsg) {push(iMsg);}
};
报错说value_type、top()、pop() 和 push() 都没定义,其实这些都是基类中的公有成员。非要写成这样:
template<class _MSGTYPE,
class _CONTAINER = std::vector<_MSGTYPE>,
class _COMP = std::less<typename _CONTAINER::value_type> >
class pri_msg_queue : public std::priority_queue<_MSGTYPE, _CONTAINER, _COMP>
{
typedef std::priority_queue<_MSGTYPE, _CONTAINER, _COMP> _BASE;
public:
typedef typename _BASE::value_type value_type;
const value_type& front() const {return _BASE::top();}
void pop_front() {_BASE::pop();}
void push_back(const value_type& iMsg) {_BASE::push(iMsg);}
};
那还要基类和派生干吗?干脆把基类直接作为一个成员算了。
作者: Michael
时间: 2006-6-12 20:35
真得吗,如果是这样,那就不能叫做和标准的不兼容了,这简直是对C++的颠覆了。呵呵。
不过我刚才用MinGW试了一下,继承自基类模版的成员可以正常的在子类中使用,并不需要限定符啊。
我觉得在Windows下还是使用VC7比较好,编译出的代码的执行效率比GCC高出几倍。对标准的支持也不错。
作者: asbai
时间: 2006-6-12 23:58
嗯,我用的也是 MinGW——GCC 3.4.2,确实有这个问题。
不过真实代码中的类是定义在一个名空间中的,而不是直接放在全局名空间里。但这也完全不应当成为出现这种现像的理由,呵呵。