Re: Интерфейс операций с памятью (ищу пример)
От: jazzer Россия Skype: enerjazzer
Дата: 10.04.13 01:56
Оценка:
Здравствуйте, 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
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.