今天看到一个半天没有明白
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"));我就认识了;
僵化