程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++模板的魅力和魔力

C++模板的魅力和魔力

編輯:C++入門知識

本文要解決的問題很好描述,但要想取個對應的標題還真不容易。

任務描述:假設我有一個邏輯線程,這個線程專門用來處理 各種類成員函數的調用。

要求:類類型不限,類成員函數參數類型可以任意。

首先為這些成員函數定義一個基類

class Task

{

public:

virtual void Run() = 0;

};

其次,抽象出各類的成員函數參數類型,下面以一個參數為例

template <class T,class Method,class A>

class Task1 : public Task

{

private:

T* obj;  Method method;  A arg;

public:

Task1(T* t, Method m, const A &a){ obj = t;  method = m;  arg = a; }

protected:

virtual void Run(){ (obj->*method)(arg); }

};

為了方便線程操作,再抽象出一個專用的函數

template <class T,class Method,class A>

Task* NewTask(T* t,Method m,A &a)

{

return new Task1<T,Method,A>(t, m, a);

}

如何在線程中應用呢?這個很簡單,在線程中定義一個deque,每次調用NewTask函數往隊列中插入一個Task,線程函數每次從deque中取出一個Task然後執行其Run方法即可。

下面做一個簡單的測試(不是線程)

class JTest
{
public:
void f1(int c)
{
cout<<"arg: "<<c<<endl;
}
void test()
{
int c = 5;
Task* t = NewTask(this, &JTest::f1, c);
t->Run();
delete t;
}
};


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved