自动化C++程序设计

#if 0

在通常的编程问题中经常会遇到使用宏的情况,但是在很多的情况下C宏又非常的不方
便,在自动化编程方面,使用宏就非常不方便了,甚至不可能了,下面我们将要考虑一个C
宏不可以做到的事情如何使用模板元编程来实现。在本文中将会以一个具体的例子展示这
种自动化方法,希望能够起到抛砖引玉的效果:)

首先考虑下面的问题,有下面的一个类Class,有几个基类成员;需要写一个函数
print来输出所有的基类成员的内容:

#endif

#ifdef CODE_NOTE
class Class
:public std::vector<int>
,public std::vector<float>
{
public:
void print();
};
#endif//CODE_NOTE

#if 0

采用宏的方案可以很容易的实现这个print函数;具体方案如下:

#endif

#ifdef CODE_NOTE
void Class::print()
{
#define PRINT(T){/
typedef std::vector<T> VT;/
VT&v=static_cast<VT&>(*this);/
std::copy(v.begin(),v.end(),std::ostream_iterator<T>(std::cout," "));/
std::cout << std::endl;}
PRINT(int)
PRINT(float)
#undef PRINT
}
#endif//CODE_NOTE

#if 0

那么如果基类成员的数量增多以后,例如:下面的这种形式,类型增加到了5个:

#endif

#ifdef CODE_NOTE
class Class
:public std::vector<int>
,public std::vector<float>
,public std::vector<double>
,public std::vector<char>
,public std::vector<long>
{
public:
void print();
};
#endif//CODE_NOTE

#if 0

当然可以采用前面的只有两个类型的情况一样将PRINT宏多复制几遍,修改相应的类型
就可以啦,如下所示:

#endif

#ifdef CODE_NOTE
void Class::print()
{
#define PRINT(T){/
typedef std::vector<T> VT;/
VT&v=static_cast<VT&>(*this);/
std::copy(v.begin(),v.end(),std::ostream_iterator<T>(std::cout," "));/
std::cout << std::endl;}
PRI
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值