Здравствуйте, assm-spb, Вы писали:
AS>AS>DataType1 ds(100); //100 элементов типа 1
AS>DataType2 dd(1000); //1000 элементов типа 2
AS>//Догадаться, какой аргумент за что отвечает – невозможно без просмотра прототипа
AS>Ds.ConvertRangeToType2(dd, 200, 0, 100);
AS>
AS>не выйдет, так как не получиться вернуть ссылки, созданные в вызываемых функциях. Если добавить манипулятор и перейти к указателям – их надо сохранять, чтобы затем удалить, либо использовать auto_ptr. И то и другое – громоздко. Может быть, кто-нибудь подскажет хороший пример интерфейса операций (манипуляции) с памятью?! Или, опираясь на свой опыт подскажет, как бы надо поступить?
Как насчет протокола STL?
Я правильно понимаю, что тебе надо скопировать данные из
ds в
dd на 200 позиции?
Если
ds и
dd поддерживают интерфейс STL, то код будет выглядеть вот так:
std::copy( ds.begin(), ds.end(), dd.begin()+200 );
Тут будет использоваться присваивание, т.е. предполагается, что переменной типа 2 можно присвоить переменную типа 1.
Если такого присваивания нет, но есть функция/функтор для конвертирования
convert, то используй
std::transform:
std::transform( ds.begin(), ds.end(), dd.begin()+200, convert );
ЗЫ Алгоритмы Boost.Range идут еще дальше, там достаточно будет просто написать
ds вместо
ds.begin(), ds.end().
http://www.boost.org/libs/range/doc/html/range/reference/algorithms/mutating/copy.html
http://www.boost.org/libs/range/doc/html/range/reference/algorithms/mutating/transform.html