вот думаю - насколько это приемлемо. вообще, для строк довольно удобно: Код (Text): CString(unsigned int n_strings, CString *s1, ...) {...} можно, конечно, склеивать по отдельности Код (Text): res = s1 + s2 + ...; но, не очень оптимально - каждый оператор будет перекраивать кучу, копировать строки, а тут за один раз получаешь то, что нужно...
cupuyc в С++ это не имеет смысла, т.к. не дает никакой оптимизации но можно перегрузить конструктор для каждого числа строк
как это не даёт? допустим нужно подсчитать s1+s2+s3: вызывается s1.operator+(s2.operator+(s3)), что превращается в выделение памяти для s2+s3, затем для s1+ (s2+s3). если же я определю конструктор (CString *s1, CString *s2, ...), то я могу за один проход выделить память под все строки и скопировать их.
cupuyc Так-то оно так, вот только в 99% случаев если операция сложения строк в твоей программе вдруг стала ботлнеком, то тебе остается только застрелиться В особо экзотических задачах, где это реально perfomance-critical операция, можно для операций со стоками написать шаблоны выражений. См. Дэвид Вандевурд, Николай М. Джосаттис, "Шаблоны C++. Справочник разработчика". http://www.ozon.ru/context/detail/id/3960662/
Зачем обязательно конструктор? Почему не сделать отдельный метод как в mfc CString::Format? Ещё есть такая штука как отложенные вычисления - Ускорение вычислений при перегрузке бинарных операторов Можно немного расширить концепцию, например в SumString(к примеру) хранить не два указателя, а список, и определить оператор суммы строки и SumString.
Booster Кстати, интуиция и здравый смысл подсказывают, что у компилятора будет больше простора для оптимизации, если хранить на операнды ссылки, а не указатели.
Booster Я имел ввиду тот заворачивающий моск механизм, который описан в книге. В других источниках я такого не видел, поэтому не могу утверждать что этому есть какое-то устоявшееся название.
не понял. а что делать, если нужен форматный вывод? как обойтись без копирования строк? вообще говоря, я хочу чтобы сорец выглядел красиво и при этом качество кода было высоким. понятно, что вместо CString можно юзать указатели и работать с буферами, но тогда как фигово будут выглядеть сорцы... вот я и ищу более-менее приемлемый вариант.
посодержательней? что тут некрасивого? если Вы думаете, что я юзаю mfc - то это не так. название класса - просто абстракция, чтобы было понятно о чём идёт речь.
у моего CString нет Format - и собрать его мне не оч хочется. мне вполне хватит glue_strings. На самом деле, мне вообще интересно не столько конкретный случай, сколько сам подход - юзать методы с переменным числом аргументов: