读书人

模板参数有关问题

发布时间: 2012-03-21 13:33:15 作者: rapoo

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

读书人网 >C++

热点推荐