[C/C++]_[簡単な例はテンプレートtemplateの特性を見る]
シーン:
1.テンプレートはC++の中で必ず少なくない文法の特性で、特にコードに対して再利用して、アルゴリズム、データ構造をカスタマイズして符号化する時極めて大きい重複コードを減らすことができて、コードのメンテナンス量を減らす.
2.以下のコードは<16.1,16.2,16.3章を学習した.
コード:test_template.cpp
出力:
2015.6.14テンプレートを追加するパラメータは関数である.
参照先:http://blog.csdn.net/infoworld/article/details/46492131
1.テンプレートはC++の中で必ず少なくない文法の特性で、特にコードに対して再利用して、アルゴリズム、データ構造をカスタマイズして符号化する時極めて大きい重複コードを減らすことができて、コードのメンテナンス量を減らす.
2.以下のコードは<
コード:test_template.cpp
#include <stdlib.h>
#include <string>
#include <iostream>
#include <string.h>
//1.
template <typename Type> class QueueItem;
//2. template <class or typname keyword,parameter list>
//5. .
//6.
template <typename Type,int id,typename Info = std::string>
class Queue
{
public:
Queue(Info info):front_(NULL),last_(NULL),size_(0),info_(info),id_(id){}
Type& Front();
void Pop();
void Push(const Type& val);
bool IsEmpty()
{
return front_ == NULL;
}
size_t Size()
{
return size_;
}
Info& GetInfo()
{
return info_;
}
int GetId()
{
return id_;
}
private:
QueueItem<Type> *front_;
QueueItem<Type> *last_;
size_t size_;
Info info_;
int id_;
};
template <typename Type> class QueueItem
{
public:
//4. , .
QueueItem(const Type& type):item(type),next_(NULL){}
Type item;
QueueItem<Type> *next_;
};
//7.
// template
template <typename Type,int id,typename Info>
Type& Queue<Type,id,Info>::Front()
{
return front_->item;
}
//3.
template <typename Type,int id,typename Info>
void Queue<Type,id,Info>::Pop()
{
QueueItem<Type> *temp = front_;
front_ = front_->next_;
delete temp;
--size_;
}
template <typename Type,int id,typename Info>
void Queue<Type,id,Info>::Push(const Type& val)
{
QueueItem<Type> *p = new QueueItem<Type>(val);
if(last_)
{
last_->next_ = p;
last_ = last_->next_;
}else
{
front_ = p;
last_ = p;
}
++size_;
}
int main(int argc, char const *argv[])
{
//6.
Queue<std::string,11> q("fisrt q");
q.Push("hello");
q.Push("world");
q.Push("Sai");
std::cout << q.Size() << std::endl;
std::cout << q.GetInfo() << std::endl;
std::cout << q.GetId() << std::endl;
while(!q.IsEmpty())
{
std::string& str = q.Front();
std::cout << str << std::endl;
q.Pop();
}
Queue<std::string,12> d("second d");
d.Push("default");
d.Push("Type");
d.Push("is");
d.Push("std::string");
std::cout << d.Size() << std::endl;
std::cout << d.GetInfo() << std::endl;
std::cout << d.GetId() << std::endl;
while(!d.IsEmpty())
{
std::string& str = d.Front();
std::cout << str << std::endl;
d.Pop();
}
return 0;
}
出力:
3
fisrt q
11
hello
world
Sai
4
second d
12
default
Type
is
std::string
2015.6.14テンプレートを追加するパラメータは関数である.
参照先:http://blog.csdn.net/infoworld/article/details/46492131
template<BOOL (WINAPI* WrapHandleFunc)(void*)>
class WrapHandle
{
public:
WrapHandle(void* data):data_(data){}
~WrapHandle()
{
if(data_)
{
WrapHandleFunc(data_);
data_ = NULL;
}
}
private:
void* data_;
};