从VC++到GCC移植:谈两者语法差异
类型引用
模板类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;} };
0条评论