C++ 模板专门化和普通旧函数
我有一个简单的问题,请检查此代码:C++ 模板专门化和普通旧函数,c++,templates,specialization,partial-specialization,C++,Templates,Specialization,Partial Specialization,我有一个简单的问题,请检查此代码: template < typename A > void foo( A a ) { cout<<"1\n"; }; template< > void foo<float>( float a ) { cout<<"2\n"; } void foo( float a ) { cout<<"3\n"; } int main() { foo<float>( 1.0f
template < typename A >
void foo( A a )
{ cout<<"1\n"; };
template< >
void foo<float>( float a )
{ cout<<"2\n"; }
void foo( float a )
{ cout<<"3\n"; }
int main()
{
foo<float>( 1.0f );
}
模板
空富(A)
{cout您具体使用的是专用版本。您是否这样做过:
template <typename T>
void foo(T a) {
std::cout << "1" << std::endl;
}
void foo(float a) {
std::cout << "2" << std::endl;
}
int main(void) {
foo(1.0f);
}
模板
无效foo(T a){
std::您是否需要调用foo(1.0f)
来获取非模板。foo
是模板函数专门化的名称(您恰好明确专门化了该函数;如果没有专门化,则会看到“1”)。如果不提供
语法,重载解析确实会更喜欢非模板函数。另请参见@jrok:No,因为foo
和foo
是不同的名称。调用函数时只编写foo
也会导致查找像foo
这样的函数模板,这只是一个问题过载分辨率的“特征”。