带有std::vector重载的模板化方法未生效



我知道这个问题已经被问了很多次,但参考这个问题的答案:如何为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的向量。

最新更新