65,210
社区成员
发帖
与我相关
我的任务
分享
class CA;
std::queue<CA*> freeCA;
CA* allocateCA(){
CA* p = NULL;
if (freeCA.empty())
p = new CA;
else{
p = freeCA.front();
freeCA.pop();
}
return p;
} // 释放操作为将指针p放入freeCA中(freeCA.push(p);)
// 定义一个模板函数NEW/DELETE
template <typename T>
T* NEW()
{
return new T;
}
template <typename T>
void DELETE(T* p)
{
if (NULL != p) delete p;
}
// 然后针对类型特化
template <>
CA* NEW<CA>() // NEW()没有参数, 再次对class CB 特化时出错,原因为两个NEW只有返回值不一样,不能overloaded
{
CA *p = NULL;
if (freeCA.empty())
p = new CA;
else{
p = freeCA.front();
freeCA.pop();
}
return p;
}
template <>
void DELETE<CA>(CA* p)
{
if (NULL == p) return;
if (freeCA.size() < MAX_CA){
p.~CA();
freeCA.push(p);
}
else
delete p;
}
// 最后定义宏NEW(x)
#define NEW(x) NEW<x>()
#define DELETE(x, p) DELETE<x>(p)
template <typename T>
T* NEW(T *)
{
return new T;
}
std::queue<ca*> freeca;
const int MAX_CA = 10;
template <>
ca* NEW<ca>(ca *)
{
ca *p = NULL;
if (freeca.empty())
p = new ca;
else{
p = freeca.front();
freeca.pop();
}
return p;
}
std::queue<cb*> freecb;
const int MAX_CB = 10;
template <>
cb* NEW<cb>(cb *)
{
cb *p = NULL;
if (freecb.empty())
p = new cb;
else{
p = freecb.front();
freecb.pop();
}
return p;
}
// 最后定义宏NEW(x)
#define NEW(x) NEW<x>((x*)NULL)
class CA{};
class CB{};
template <class T>
void f(){}
template<>
void f<CA>(){}
template<>
void f<CB>(){}
int main(int argc, char* argv[])
{
return 0;
}
int main(int argc, char* argv[])
{
f<CA>();
f<CB>();
return 0;
}
template <typename T>
T* NEW()
{
return new T;
}
std::queue<ca*> freeca;
const int MAX_CA = 10;
template <>
ca* NEW<ca>()
{
ca *p = NULL;
if (freeca.empty())
p = new ca;
else{
p = freeca.front();
freeca.pop();
}
return p;
}
std::queue<cb*> freecb;
const int MAX_CB = 10;
template <>
cb* NEW<cb>()
{
cb *p = NULL;
if (freecb.empty())
p = new cb;
else{
p = freecb.front();
freecb.pop();
}
return p;
}
class CA{};
class CB{};
template <class T>
void f(){}
template<>
void f<CA>(){}
template<>
void f<CB>(){}
int main(int argc, char* argv[])
{
return 0;
}#include <iostream>
using namespace std;
class CA{};
class CB{};
template <class T>
void f(){}
template<>
void f<CA>()
{
cout<<"A"<<endl;
}
template<>
void f<CB>()
{
cout<<"B"<<endl;
}
int main(int argc, char* argv[])
{
f<CA>();
f<CB>();
return 0;
}
A
B
Press any key to continue . . .