• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++多态实现之三--模板

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。

  模板是一种对类型进行参数化的工具;

  通常有两种形式:函数模板类模板

  函数模板针对仅参数类型不同的函数

  类模板针对仅数据成员成员函数类型不同的类。

  使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些类型无法实现,要实现这些类型的交换就要重新编写另一个swap函数。使用模板的目的就是要让这程序的实现与类型无关,比如一个swap模板函数,即可以实现int 型,又可以实现double型的交换。模板可以应用于函数和类。下面分别介绍。

  注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。

具体的模板使用方法请参考专门将模板的书籍。

这里举个模板使用例子:实现封装c++11的线程。

 

#include <thread>
#include <iostream>
#include <list>

using namespace std;

class thead_group
{
private:
    thread_group(const thread_group&){} //禁用拷贝构造和赋值
    thread_group& operator=(const thread_group&){} 
pubcli:
    template<typename... T>//可变参数列表模板
    void thread_create(T... func)
    {
           thread* p_thread = new thread(func...);
           vct_thread.push(p_thread);
    }
    void thread_join()
    {
         for(const auto &thrd : vct_threads)
        {
              thrd->join();
        }
    }

private:  
    list<thread*> vct_threads;
}

void func1()
{
    cout << "this is func1" << endl;
}    

void func2(int a)
{
    cout << "this is fun2, param : " << a << endl;  
}

int main(int argc, char** argv)
{
    thread_group thrd;
    thrd.create_thread(func1);    
    thrd.create_thread(func2, 10);
    thrd.thread_join();
    return 0;
}
       

 

输出结果:this is func1       this is func2, param : 10

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#实现将图片设置成圆形形式显示发布时间:2022-07-13
下一篇:
lua函数调用--闭包详解和C调用发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap