美文网首页
今日学习笔记

今日学习笔记

作者: 旺财妹妹的铁锤哥哥 | 来源:发表于2016-12-12 18:56 被阅读28次

今天起的很晚。
以下为今天的学习笔记,以后只要没有琐事会天天发的。

.hpp是什么, 怎么用:
为c++的头文件,c++允许在.hpp文件中编写函数体的声明和实现代码。在调用函数时只需要包含其头文件即可。

pragma once

保证程序的不重复编译

模板类的静态成员
模板类中的静态成员变量声明了不同的函数实体将产生不同的静态成员变量。
模板参数:

整形模板参数:
    准确的说是整形常量
    #include <iostream>
    #include <stdexcept>
    using namespace std;
    template<typename T, unsigned size>
    class array
    {
        T elems[size];
        public:
        T& operator[](unsigned i) throw (std::out_of_range) {
        if(i >= size) throw std::out_of_range("array access out of range.");
        else return elems[i];
        }
    };
    int main(void)
    {
        array<int, 10> array0;
        try{array0[11] = 0;}
        catch(std::out_of_range& e)
        {
        cerr<<"Access out of range."<<endl;
        }
        return 0;
    }

函数指针模板参数:
    使用了模板技术实现了类似回调的“静态回调”
    #include <iostream>

    template<typename T , void (*f)(T& v)>
    void foreach(T array[], unsigned size)
    {
        for(unsigned i=0; i<size; i++) f(array[i]);
    }
    template<typename T>
    void inc(T &v)
    {
        ++v;
    }
    template<typename T>
    void dec(T &v)
    {
        --v;
    }
    template<typename T>
    void print(T &v)
    {
        std::cout<<" "<<v<<std::endl;
    }
    int main(void)
    {
        int array[] = {1, 2, 3, 4};
        foreach<int, inc<int> >(array, 4);
        foreach<int, print<int> >(array, 4);
        return 0;
    }
指针引用模板参数:
    指针和引用都要声明成全局变量
    #include <iostream>
    using namespace std;
    template<int *p>
    struct wrapper
    {
       int get(){return *p;}
       void set(int v){*p = v;} 
    };

    int global_variable = 0;
    int main(void)
    {
        wrapper<&global_variable> gwrapper;
        gwrapper.set(1);
        cout<<gwrapper.get()<<endl;
        
        return 0;
    }

类成员函数指针模板参数:
    #include <iostream>
    using namespace std;
    class some_value;
    typedef int (some_value::* some_value_mfp)(int);
    template<some_value_mfp func>
    int call(some_value &value, int op){return (value.*func)(op);}
    class some_value{
        int value ;
        public:
        some_value(int _value):value(_value){}
        int add_by(int op){return value += op;}
    };
    int main(void)
    {
        some_value v0(0);
        cout<<call<&some_value::add_by>(v0, 2)<<endl;
        return 0;
    }
模板型模板参数:
    #include <iostream>
    using namespace std;
    template<template<typename TT> class Func, typename T>
    void foreach(T array[], unsigned size)
    {
        Func<T> func;
        for(unsigned i=0; i<size; ++i) func(array[i]);
    }
    template<typename T>
    struct inc
    {
        void operator()(T& v) const {v++;}   
    };
    template<typename T>
    struct print
    {
        void operator()(T& v) const {cout<<" "<<v;}
    };
    int main(void)
    {
        int array[] = {1,2,3,4,5,6};
        foreach<inc, int>(array, 6);
        foreach<print, int>(array, 6);
        return 0;
    }

异常:超出范围的值抛出的:<stdexcept>头文件下的 std::out_of_rang

相关文章

  • 最近工作太忙,又有好几周没更新了,今天来一波!

    如题,今日主题:golang 学习笔记

  • E站第24天-认识图表

    回顾目标: 001学习今日课程输出笔记 002录制翻转课堂 评估结果: 001学习今日课程输出笔记。9分 002翻...

  • 学习笔记----机器学习(五)

    我是iOS开发者之一。我们的App:今日好出行 申明一下,只是学习笔记,只是学习笔记,只是学习笔记。 机器学习工具...

  • 学习笔记----机器学习(二)

    我是开发者之一。我们的App:今日好出行 申明一下,只是学习笔记,只是学习笔记,只是学习笔记。 1.python ...

  • 学习笔记----机器学习(三)

    我是iOS开发者之一。我们的App:今日好出行 申明一下,只是学习笔记,只是学习笔记,只是学习笔记。 Pandas...

  • 4月4日偶然所得

    今天学习内容:什么是三栏笔记 今日感悟:学会了用内容~感悟~行动来做笔记 今日行动:这是第一篇笔记。

  • 今日学习笔记

    今日学习笔记来自于陈海贤《自我发展心理学》 一、增加自我动力的思维方式:控制的两分法。 第1步,遇到一件事的时候,...

  • 今日学习笔记

    1.比特币转账机制 a.比特币转账:登陆比特币钱包,选择转出地地址钱包(为一长串30位大小写字母和数字组成的字符串...

  • 今日 学习笔记

    告别一个身份后,就想休息一下,今天晚上纯纯的休息,下班回到家,就是吃吃吃、喝喝喝、看电视、看综艺,到现在,今天的文...

  • 今日学习笔记

    今天起的很晚。以下为今天的学习笔记,以后只要没有琐事会天天发的。 .hpp是什么, 怎么用:为c++的头文件,c+...

网友评论

      本文标题:今日学习笔记

      本文链接:https://www.haomeiwen.com/subject/dttvmttx.html