ARRAYOFCONST

今天看到一个半天没有明白

 

ARRAYOFCONST(( LogDir1, LogDir2))

 

ARRAYOFCONST是个宏定义

 

#define ARRAYOFCONST(values) /
 OpenArray<TVarRec>values, OpenArrayCount<TVarRec>values.GetHigh()

 

OpenArray有个构造为

 

__fastcall OpenArray(T arg0, T arg1)
{
  Array = new T[Count = 2];
  Array[0] = arg0;
  Array[1] = arg1;
}

 

OpenArrayCount有个构造为

 

__fastcall OpenArrayCount(T arg0,T arg1): Count(2) {};

 

OpenArrayCount还有个成员函数为

 

int __fastcall GetHigh() {return Count - 1;}

 

ARRAYOFCONST(( LogDir1, LogDir2))展开为

 

OpenArray<TVarRec>(LogDir1, LogDir2),  OpenArrayCount<TVarRec>( LogDir1, LogDir2).GetHigh()

 

或许是我的思维太固化了,在以前接触的类模版的使用都是这样的形式 OpenArray<TVarRec> A(LogDir1, LogDir2)

 

A是一个对象, LogDir1, LogDir2是构造参数

 

现在没有显示的A了,直接就是OpenArray<TVarRec>(LogDir1, LogDir2),跟了一下是调用的上面的构造函数,说明这样也行啊!

 

实际上他是用在一个函数里的

 

Format("%s%s", ARRAYOFCONST(( LogDir, LogDir2));

 

展开就是Format("%s%s",

                         OpenArray<TVarRec>(LogDir1, LogDir2), 

                         OpenArrayCount<TVarRec>( LogDir1, LogDir2).GetHigh()

                       );

 

确实看起来更加精炼;

 

我以前的写法是这样的

 

   OpenArray<TVarRec> A(LogDir,LogDir1);
   OpenArrayCount<TVarRec> B(LogDir,LogDir1);

   int  cnt = B.GetHigh();

   String LogFileName = Format("%sbluesea_%s.log", A, cnt);

 

 

这里是一个模版类,换成一般的,比如    Function(String("haha"));我就认识了;

 

僵化

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值