Есть два простых варианта, которые я могу придумать.
Первым вариантом будет тот, который вы опишите: создайте конструктор, который принимает объект другого типа:
struct UIEvent
{
UIEvent(const Event&);
};
и используйте std::copy
для копирования элементов из вектора одного типа в вектор другого:
std::vector<Event> eventVector;
std::vector<UIEvent> uiEventVector;
std::copy(eventVector.begin(), eventVector.end(),
std::back_inserter(uiEventVector));
Второй вариант - написать функцию преобразования, не являющуюся членом:
UIEvent EventToUIEvent(const Event&);
и используйте std::transform
:
std::transform(eventVector.begin(), eventVector.end(),
std::back_inserter(uiEventVector), &EventToUIEvent);
Преимущество такого подхода состоит в том, что между классами меньше прямой связи. С другой стороны, иногда классы в любом случае естественным образом связаны, и тогда первый вариант может иметь такой же смысл и может быть менее громоздким.