关于模板特化在不同的命名空间的问题
2010-06-08 09:40
381 查看
昨天晚上写代码的时候遇到了这样一个问题:
如此代码本以为编译应该没有什么问题,不过现实却是残酷的,一个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了:
//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; } }
相关文章推荐
- 关于C#引用Dll后,找不到命名空间的问题
- 关于struts2使用命名空间后action路径问题
- [备忘]关于C#引用Dll后,找不到命名空间的问题
- 关于Javascript模块化和命名空间管理的问题说明
- c++不同的命名空间访问的问题
- 关于一些概念的问题,命名空间,程序集,解决方案,项目
- 关于Javascript模块化和命名空间管理的问题说明
- 关于Javascript模块化和命名空间管理的问题说明
- 不同命名空间的对象二进制反序列化问题
- 关于引用动软代码 找不到dll命名空间问题
- 关于自定义view使用,命名空间问题,记录而已
- unity3d 关于c#命名空间引用问题
- 关于Struts2中的namespace(命名空间的问题)
- 关于C#引用Dll后,找不到命名空间的问题
- webservice的model层命名空间不同的问题
- 关于预编译头 protocol buffer 命名空间的问题
- 关于用Xmlbeans生成XML文件时,节点前会默认加上命名空间的问题
- 关于flash builder 4 命名空间问题 【xmlns】
- 关于soap命名空间的问题(转)
- 关于php接口中命名空间报错问题: