从VC++到GCC移植:谈两者语法差异

从VC++到GCC移植:谈两者语法差异,第1张

从VC++到GCC移植:谈两者语法差异,第2张

类型引用

模板类Foo { typedef T::SomeType SomeType;};


这段代码在VC++里完全没有问题,但是GCC不允许,因为它不知道T::SomeType是什么。您需要更改为:

模板类Foo { typedef typename T::SomeType SomeType;};


通过typename T::SomeType告诉GCC,SomeType是类型名,不是别的。

当然,这种情况不仅仅发生在typedef中。例如:

模板void访问(const Container & cont){ for(Container::const _ iterator it = cont . begin();它!= cont . end();++it)...}


这里的Container::const_iterator也需要改成TypeName Container::const _ iterator。

成员参考

模板类Foo:public Base { public:void Foo(){ Base _ func();m _ base _ member = 0;} };


这段代码在VC++中也没有问题,但是在GCC中过不去。因为GCC不知道base_func,m_base_member是什么。你可以用两种方式改变这个问题:

方法1:添加域操作员库::

模板类Foo:public Base { public:void Foo(){ Base::Base _ func();base::m _ base _ member = 0;} };

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 从VC++到GCC移植:谈两者语法差异

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情