zoukankan      html  css  js  c++  java
  • C++ 模板练习摘要

    万分感谢 空明流转 菊苣的模板教程: 

    https://github.com/wuye9036/CppTemplateTutorial

     本文就是给自己快速参阅回想用的,不一定适合别人看。

    #include <iostream>
    using namespace std;

    template <typename T> class AddFloatOrMulInt
    {
        static T Do(T a, T b)
        {
            // 在这个例子里面一般形式里面是什么内容不重要,因为用不上
            
    // 这里就随便给个0吧。
            return T(0);
        }
    };

    // 其次,我们要指定T是int时候的代码,这就是特化:
    template <> class AddFloatOrMulInt<int>
    {
    public:
        static int Do(int a, int b) // 
        {
            return a * b;
        }
    };

    // 再次,我们要指定T是float时候的代码:
    template <> class AddFloatOrMulInt<float>
    {
    public:
        static float Do(float a, float b)
        {
            return a + b;
        }
    };



    int main()
    {
        int result = AddFloatOrMulInt<int>::Do(1,2);
        cout<<result;

        getchar();
        return 0;
    }

    /*
    我们再把特化的形式拿出来一瞧:这货有点怪啊: template <> class AddFloatOrMulInt<int>。别急,我给你解释一下。

    // 我们这个模板的基本形式是什么?
    template <typename T> class AddFloatOrMulInt;

    // 但是这个类,是给T是Int的时候用的,于是我们写作
    class AddFloatOrMulInt<int>
    // 当然,这里编译是通不过的。

    // 但是它又不是个普通类,而是类模板的一个特化(特例)。
    // 所以前面要加模板关键字template,
    // 以及模板参数列表
    template <  这里要填什么? > class AddFloatOrMulInt<int>;

    // 最后,模板参数列表里面填什么?因为原型的T已经被int取代了。所以这里就不能放任何额外的参数了。
    // 所以这里要放空。
    template <> class AddFloatOrMulInt<int>
    {
        // ... 针对Int的实现 ... 
    }

    // Bingo!

    */ 

  • 相关阅读:
    RT-thread内核之事件
    RT-thread内核之互斥量
    RT-thread内核之信号量
    RT-thread内核之进程间通信
    RT-thread内核之异常与中断
    RT-thread内核之IO设备管理系统
    RT-thread内核之小内存管理算法
    RT-thread内核之系统时钟
    RT-thread内核之定时器管理
    s19文件格式详解
  • 原文地址:https://www.cnblogs.com/likeatree/p/4380296.html
Copyright © 2011-2022 走看看