模板参数问题
如下一段代码在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说明!