模板与名字空间
------------------------------------------------------------------------------------
问题:
一个模板在名字空间中定义,[不在名字空间中进行模板特化声明,直接在名字空间外面定义模板特化]这种情况允许么?(对于非模板实体,不可以[不在名字空间中首先声明就在名字空间外面加以定义],这个想必大家都知道)
------------------------------------------------------------------------------------
例子:
1.类模板:
namespace ns{
template <class T>//类模板在名字空间中定义
class foo{
public:
void test(T a){
cout << "aaaa:" << a << endl;
}
};
}
template<>//类模板显式特化,未在名字空间ns中声明
class ns::foo<int>{
public:
void dddd(){
cout << "dddd" << endl;
}
};
结果:vs2005成功,g++失败。
2.函数模板:
namespace ns{
template <class T>//函数模板在名字空间中定义
void test(T a){
cout << a << endl;
}
}
template<>//函数模板显式特化,未在名字空间ns中声明
void ns::test(int){
cout << "int" << endl;
}
结果:vs2005成功,g++失败。
------------------------------------------------------------------------------------
望高手解答,谢谢。