【发布时间】:2015-11-25 13:43:49
【问题描述】:
我有关于 Visual C++ 6.0 和 Visual Studio 2008 的模板函数的简单代码。
#include <stdio.h>
#include <vector>
template<typename T>
void function(const std::vector<T> &vec)
{
printf("vector version\n");
}
template<typename T>
void function(T val)
{
printf("value version\n");
}
int main()
{
std::vector<int> vec;
function(vec);
return 0;
}
每种环境都试过了,终于搞定了
在VC6,value版本的功能,
在VS2008,vector版本的功能。
我有 2 个问题。
-
我已经认识到重载函数调用的优先级如下,
a) 专用函数(无隐式类型转换)
b) 模板函数(无隐式类型转换)
c) 具有隐式类型转换的专用函数
d) 模板函数,隐式类型转换有了这条规则,上面的结果似乎是
在 VC6 中,b) 被接受(使用= std::vector )
在 VS2008 中,b) 被忽略(?) 并且 d) 被接受(?) (with= int) 这说明VC6有效,VS2008错误。
我的猜测不正确吗? 虽然,我希望 VC6 和 VS2008 都调用矢量版本。
我可以吗?
问候。
【问题讨论】:
标签: c++ visual-studio templates visual-c++-6