#include <vector>
struct Foo { float v; };
struct Bar { int i; };
struct Tar { float p, q; };
void Convert(const Foo& x, Bar& y) { y.i = static_cast<int>(x.v); }
void Convert(const Tar& x, Foo& y) { y.v = x.p + x.q; }
template<typename X, typename Y>
void Convert(const std::vector<X>& cx, std::vector<Y>& cy) {
cy.resize(cx.size());
for(std::size_t i=0; i<cx.size(); i++) {
Convert(cx[i], cy[i]);
}
}
int main() {
std::vector<Foo> cx(10);
std::vector<Bar> cy;
Convert(cx, cy);
}
I2luY2x1ZGUgPHZlY3Rvcj4gCgpzdHJ1Y3QgRm9vIHsgZmxvYXQgdjsgfTsKc3RydWN0IEJhciB7IGludCBpOyB9OwpzdHJ1Y3QgVGFyIHsgZmxvYXQgcCwgcTsgfTsKCnZvaWQgQ29udmVydChjb25zdCBGb28mIHgsIEJhciYgeSkgeyB5LmkgPSBzdGF0aWNfY2FzdDxpbnQ+KHgudik7IH0Kdm9pZCBDb252ZXJ0KGNvbnN0IFRhciYgeCwgRm9vJiB5KSB7IHkudiA9IHgucCArIHgucTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4Kdm9pZCBDb252ZXJ0KGNvbnN0IHN0ZDo6dmVjdG9yPFg+JiBjeCwgc3RkOjp2ZWN0b3I8WT4mIGN5KSB7CiAgIGN5LnJlc2l6ZShjeC5zaXplKCkpOwogICBmb3Ioc3RkOjpzaXplX3QgaT0wOyBpPGN4LnNpemUoKTsgaSsrKSB7CiAgICAgQ29udmVydChjeFtpXSwgY3lbaV0pOwogICB9Cn0KCmludCBtYWluKCkgewogICAgc3RkOjp2ZWN0b3I8Rm9vPiBjeCgxMCk7CiAgICBzdGQ6OnZlY3RvcjxCYXI+IGN5OwogICAgQ29udmVydChjeCwgY3kpOwp9