Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VC6和VS2008之间的模板函数行为 我有Visual C++ 6和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; } #包括 #包括 模板 void函数(const std::vector&vec) { printf(“向量版本”\n); } 模板 空洞函数(T val) { printf(“值版本\n”); } int main() { std::vec; 功能(vec); 返回0; }_C++_Visual Studio_Templates_Visual C++ 6 - Fatal编程技术网

VC6和VS2008之间的模板函数行为 我有Visual C++ 6和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; } #包括 #包括 模板 void函数(const std::vector&vec) { printf(“向量版本”\n); } 模板 空洞函数(T val) { printf(“值版本\n”); } int main() { std::vec; 功能(vec); 返回0; }

VC6和VS2008之间的模板函数行为 我有Visual C++ 6和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; } #包括 #包括 模板 void函数(const std::vector&vec) { printf(“向量版本”\n); } 模板 空洞函数(T val) { printf(“值版本\n”); } int main() { std::vec; 功能(vec); 返回0; },c++,visual-studio,templates,visual-c++-6,C++,Visual Studio,Templates,Visual C++ 6,我尝试了各种环境,最终得到了 在VC6上,值的功能版本和 在VS2008中,矢量的功能为 我有两个问题 我已经识别出重载函数调用的优先级如下, a) 专用函数(无隐式类型转换) b) 模板函数(无隐式类型转换) c) 专用函数,具有隐式类型转换 d) 模板函数,带有隐式类型转换 根据这条规则,上述结果似乎是 在VC6,b)被接受(带=std::vector) 在VS2008,b)被忽略(?),d)被接受(?(带=int) 这意味着VC6是有效的,而VS2008是错误的。 我的猜测不对吗 不过,我

我尝试了各种环境,最终得到了
在VC6上,值的功能版本和
在VS2008中,矢量的功能为

我有两个问题

  • 我已经识别出重载函数调用的优先级如下,
    a) 专用函数(无隐式类型转换)
    b) 模板函数(无隐式类型转换)
    c) 专用函数,具有隐式类型转换
    d) 模板函数,带有隐式类型转换

    根据这条规则,上述结果似乎是
    在VC6,b)被接受(带=std::vector)
    在VS2008,b)被忽略(?),d)被接受(?(带=int)

    这意味着VC6是有效的,而VS2008是错误的。
    我的猜测不对吗

  • 不过,我希望VC6和VS2008都能调用矢量版本。
    我能做吗


  • 关于。实际上VC6是错误的;MS在VC6中对C++99标准(即模板标准化时)的支持有限,在VS2005及更高版本中支持更好

    调用
    函数(vec)
    调用

    template<typename T>
    void function(const std::template vector<T>& vec)
    
    这将推导出向量版本。注意
    >
    之间的空格,这是为了避免编译器认为您指的是流操作符
    >


    希望能有所帮助。

    非常感谢。但是,不幸的是,我的任务是维护库代码(这意味着我不能更改调用方)。我尝试另一种方法。啊!明白这是怎么回事!
    function< std::vector<int> >(vec)