由于工作需要,最近写了一个可变参数的函数,贴在下面,以后今后参考。
- StringPointer
- StringPointer::concat(size_t nszNum, StringPointer szString, ...)
- {
- szString;
- //
- // get owned string length of this string pointer
- //
- register size_t nLen = 0;
- if (_pCounted)
- {
- nLen = _pCounted->length();
- }
- register size_t nOffset = nLen;
- va_list vaList;
- StringPointer szTemp;
- register size_t i = nszNum;
- //
- // get the length of the new created string pointer
- //
- va_start(vaList, nszNum);
- while (i > 0)
- {
- szTemp = va_arg(vaList, StringPointer);
- nLen += szTemp.length();
- --i;
- }
- va_end(vaList);
- //
- // allocate memory for the new string pointer object
- //
- wchar_t* zConcat = new wchar_t[nLen + 1];
- if (_pCounted)
- {
- wcscpy(zConcat, _pCounted->value());
- }
- //
- // append each string in arguments list one by one
- //
- i = nszNum;
- va_start(vaList, nszNum);
- while (i > 0)
- {
- szTemp = va_arg(vaList, StringPointer);
- wcscpy(zConcat + nOffset, szTemp.string());
- nOffset += szTemp.length();
- --i;
- }
- va_end(vaList);
- //
- // create a new string pointer object
- //
- return StringPointer(zConcat, false);
- }