我有以下一组模板:
//1
template< typename T > void funcT( T arg )
{
std::cout<<"1: template< typename T > void funcT( T arg )";
}
//2
template< typename T > void funcT( T * arg )
{
std::cout<<"2: template< typename T > void funcT( T * arg )";
}
//3
template<> void funcT< int >( int arg )
{
std::cout<<"3: template<> void funcT< int >( int arg )";
}
//4
template<> void funcT< int * >( int * arg )
{
std::cout<<"4: template<> void funcT< int *>( int * arg )";
}
//...
int x1 = 10;
funcT( x1 );
funcT( &x1 );
有人可以解释为什么funcT( x1 );
调用函数#3并funcT( &x1 );
调用函数#2而不是#4如预期的那样吗?
我已经阅读了这篇文章http://www.gotw.ca/publications/mill17.htm,它说“重载解决方案忽略了专业化并且仅在基本功能模板上运行”。但是根据这个逻辑funcT( x1 );
应该调用函数#1,而不是#3。我很困惑。