博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板特化
阅读量:3958 次
发布时间:2019-05-24

本文共 859 字,大约阅读时间需要 2 分钟。

上一篇里,我遇见了想同时使用模板函数与非模板函数的情况。后来才知道,其实并不需要,当我想对某些特定的类型进行特殊操作时,只需要使用模板特化就可以。

所谓特化,就是说对于模板函数,对于某些类型可能需要特殊处理,所以进行特殊化。可以分为特化与偏特化,其实就是将模板列表中的模板全部特化还是部分特化。

使用 template<> 来告诉编译器,这是一个特化的模板。

  • 类模板:
    template
    class whatever{
    private: T x;public: whatever(T _x): x(_x) {
    };}template<>class whatever
    {
    private: char* x; int length;public: whatever(char* _x) {
    length = strlen(_x) + 1; x = new char[length]; memcpy(x, _x, length); } ~whatever(){
    delete[] x; }}
    如上就是类模板的特化。最开始template<>指明这是模板的特化,然后在定义的时候<char*>指明是对char*类型的特化。
  • 函数模板:
    template
    int type(T){
    return 1;}template<>int type
    (int){
    return 0;}template<>int type(float){
    return 1;}
    如上就是类模板的特化。与类模板的特化基本相同。不过如果模板类型出现在了返回值或者传入参数中时,定义中的模板参数列表可以省略,如上面对float的特化。

转载地址:http://ixxzi.baihongyu.com/

你可能感兴趣的文章
杭电ACM——1018,Big Number(思维)
查看>>
杭电ACM——6463(思维)
查看>>
杭电AC——6561(思维)
查看>>
杭电ACM——1034,Candy Sharing Game
查看>>
杭电ACM——建房子(贪心)
查看>>
杭电ACM——1297,Children’s Queue(递推)
查看>>
杭电ACM——1003,Max Sum(DP)
查看>>
杭电ACM——1042,N!(思维)
查看>>
杭电ACM——1060,Leftmost Digit(思维)
查看>>
杭电ACM——1061,Rightmost Digit(思维)
查看>>
杭电ACM——1087,Super Jumping! Jumping! Jumping!(DP)
查看>>
杭电ACM——fatmouse's speed(DP)
查看>>
杭电ACM——毛毛虫(DP)
查看>>
杭电ACM——humble numbers(DP)
查看>>
杭电ACM——6467,简单数学题(思维)
查看>>
杭电ACM——天上掉馅饼(DP)
查看>>
杭电ACM——1086,You can Solve a Geometry Problem too(思维)
查看>>
杭电ACM——2057,A + B Again(思维)
查看>>
codeforces——1097B,Petr and a Combination Lock(搜索)
查看>>
杭电ACM——2064,汉诺塔III(递推)
查看>>