您的位置:首页 > 其它

关于模板特化在不同的命名空间的问题

2010-06-08 09:40 381 查看
昨天晚上写代码的时候遇到了这样一个问题:

//enumstring.h
namespace util
{
template<typename T>
const char* EnumString(const T)
{
return "";
}
}
//test.cpp
#include "enumstring.h"
namespace debugger
{
using namspace util;
template<>
const char* EnumString<int>(const int)
{
return 0;
}
}


如此代码本以为编译应该没有什么问题,不过现实却是残酷的,一个compiler error毫不犹豫的出现在了输出信息框内

(本人是在VS2008下编译):

1>e:/work/test/test_solution001/test_2010_06_08_template/main.cpp(11) : error C2912: 显式专用化;“const char *debugger::EnumString<int>(const int)”不是函数模板的专用化

这是怎么一个情况?按照道理说我使用了using namespace util;语句已经使得util命名空间里面的东西暴露在debugger命名空间里面了?为什么编译器还是找不到。

经过我的再次测试我发现只要将特化函数与其对应的模板函数放到同一个命名空间下即可解决一下问题,也就是说,模板特化函数必须与原模板函数位于同一命名空间下.所以我们只要这样改就OK了:

//test.cpp
#include "enumstring.h"
namespace util
{
template<>
const char* EnumString<int>(const int)
{
return 0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: