Concat使用变长的参数模板来接受不同的字符串(string, const char*),为了保证string不会多次分配空间,要先求出所有字符长度之和,分配空间后在依次添加。

变长求和函数:

{{EJS0}}

调用_Sum时,第一个参数会适配T,剩下的作为参数包适配TArgs,直到参数包为空时调用普通的_Sum函数结束递归。

在准备两个版本的求字符串长度的重载。

{{EJS1}}

对参数包进行函数执行和展开,Size会求出每个字符串的大小后变成一个参数包,在把此参数包传入_Sum,_Sum进行递归求和后返回,在对string预分配内存。

{{EJS2}}

然后就是为这个分配了内存的string填充参数包的内容,同样,声明两个字符串版本的添加。

{{EJS3}}

像上面的变长求和一样,进行递归添加,每次递归把参数包的一个参数添加,然后对剩下的参数包继续传递递归。

{{EJS4}}

完整的Concat函数

{{EJS5}}