如果您可以在没有模板的情况下做同样的事情,那么 C++ 中的模板专业化有什么意义?

这是一个简单的例子:

#include <iostream>

template <class T>
void print(T in){ 
  printf("NOT printing int\n"); 
}

template <> // <-- template specialization
void print<int>(int in){ 
  printf("printing int\n"); 
}

int main(){
 print(5); // printing int
 return 0;
}

但是该int版本甚至可以不使用模板来编写,如下所示:

void print(int in){ 
  printf("printing int\n"); 
}

那么这里模板专业化的重点是什么?

编辑(可能需要它的示例)

#include <iostream>

template <class T>
void print(){ 
  printf("printing float\n"); 
}

template <> 
void print<int>(){ 
  printf("printing int\n"); 
}

int main(){
 print<float>();
 return 0;
}
埃罗里卡

关键是你不能用重载做所有事情。例如,考虑没有参数的情况:

template<class T>
void foo();

由于没有参数,因此无法重载此函数。但是它可以通过显式实例化来调用:

foo<int>();

并且这些实例化可以是专门化​​的。

然后是类模板特化,当然不能使用函数重载来完成。


重载可以完成的事情和模板特化可以完成的事情之间存在一些重叠。当它是一个选项时,通常认为使用重载更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章