我知道这个问题已经被问了很多次,但参考这个问题的答案:如何为std::vector<专门化模板成员函数;T>
如果我使用GCC9尝试一个简单的例子,它根本不起作用,我不明白为什么不起作用。我是不是遗漏了什么?
#include <vector>
#include <stdio.h>
template<typename T>
std::vector<T> foo( const std::vector<T> & )
{
printf( "vector!n" );
return std::vector<T>();
}
template<typename T>
T foo( const T & )
{
printf( "non vector!n" );
return T();
}
int main()
{
foo<int>( *( int * ) nullptr);
foo<std::vector<int>>( *( std::vector<int> * ) nullptr);
}
输出:
non vector!
non vector!
尝试更改:
foo<std::vector<int>>( *( std::vector<int> * ) nullptr);
至
foo<int>( *( std::vector<int> * ) nullptr);
您的顶部模板需要一个类型名T,该方法采用T的向量。