首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

模板参数有关问题

2012-03-21 
模板参数问题如下一段代码在vc6下正常:template classTclassTraits{}template classTclassaa{typedef

模板参数问题
如下一段代码在vc6下正常:
template <class   T>
class   Traits{};

template <class   T>
class   aa{
typedef   typename   Traits <T>   _traits_type;
};

但是用G++编译过不去,改成
template <class   T,class   _traits_type   =   Traits <T>   >
class   aa{};

才行,如果这样写我的模板参数会膨胀好几个,接受不了,大家有没有什么好方法?
那个typedef应该是很容易推演出来的语法,按道理vc6都能用的东西,G++用不了,不解。

[解决办法]
怕是要加个public在aa的typedef前面吧
[解决办法]
去掉其中的typenaem,例如:

template <class T>
class Traits{};

template <class T>
class aa
{
typedef Traits <T> _traits_type;//去掉typename!
};

int main(void)
{
aa <long> _a;

return 0
}

  我有一个非商业用途的Gcc2.95.1编译器,上述程序经过它的编译后,执行良好!

typename用以说明模板一个对T类型有依赖的名字是类型名,但在你的aa声明中:

template <class T>
class aa
{
typedef Traits <T> _traits_type;
};
中,由于模板Traits声明对模板aa可见,所以编译器有足够的知识决议Traits <T> 是一个类型名,故不需typename说明!

热点排行