Concat使用变长的参数模板来接受不同的字符串(string, const char*),为了保证string不会多次分配空间,要先求出所有字符长度之和,分配空间后在依次添加。
变长求和函数:
{{EJS0}}
调用_Sum时,第一个参数会适配T,剩下的作为参数包适配TArgs,直到参数包为空时调用普通的_Sum函数结束递归。
在准备两个版本的求字符串长度的重载。
{{EJS1}}
对参数包进行函数执行和展开,Size会求出每个字符串的大小后变成一个参数包,在把此参数包传入_Sum,_Sum进行递归求和后返回,在对string预分配内存。
{{EJS2}}
然后就是为这个分配了内存的string填充参数包的内容,同样,声明两个字符串版本的添加。
{{EJS3}}
像上面的变长求和一样,进行递归添加,每次递归把参数包的一个参数添加,然后对剩下的参数包继续传递递归。
{{EJS4}}
完整的Concat函数
{{EJS5}}