Страница 1 из 1

а вот кроссоврдик

Добавлено: 24 апр 2007, 21:32
aissp
дано:

Код: Выделить всё

struct A {
    string name;
    string address;
};

struct B {
    string name;
    string address;
};

typedef vector<A> avec;
typedef vector<B> bvec;
....

void func(avec& aa) {
   bvec bb;
   internal_func_for_filling_bb(bb);
   aa = ?????
}

Определения структур по сути одинаковы, однако ето совершенно две разные библиотеки которые вам надо скрестить. Как перевести вектор типа bvec в avec, чтобы другая библиотека его скушала более эффективно чем почленным копированием?

Код: Выделить всё

aa.resize(bb.size())
for(....) {
 aa[i].name = bb[i].name; 
...
}
вопросы про дурной дизайн с гневом отметаются :)

Добавлено: 24 апр 2007, 22:13
sz
A& operator=( A& a, const B& b )
{
// преобразуй, как нужно.
}

Добавлено: 24 апр 2007, 22:21
Marmot
А помоему, aissp-у хочется байтики за раз помувить, но чтоб красиво :)

Re: а вот кроссоврдик

Добавлено: 24 апр 2007, 22:25
ajkj3em
а чем собсно такая красота не устраивает ? -

Код: Выделить всё

internal_func_for_filling_bb(*(B*)&a);

Добавлено: 24 апр 2007, 22:39
aissp
И что вектор афффтаматически поменяет тип? Я ведь завтра проверю :) На вскидку не вериться мне. Вопрос в том что у меня два контейнера и преобразовать надо не структуру в структуру а контейнер в контейнер. Я честно не проверял не до етого было - отсюда и вопросер :)

Не байтики мувить не хочу. Кривое решение у меня есть - сделать общий хидер и перекомпилять библиотеки - поскольк у меня есть источники, но оно идет в разрез с моим моральным кодексом :)

Есть еше текузее решение, поскольку на перформанс ето не влияет оставить цикл и не забивать свою голову, но хочется как лучше :)

Re: а вот кроссоврдик

Добавлено: 24 апр 2007, 22:46
Azazello
ajkj3em писал(а):а чем собсно такая красота не устраивает ? -

Код: Выделить всё

internal_func_for_filling_bb(*(B*)&a);
Только через reinterpret_cast, чтоб aissp не ругался ;)...
Edit: блин, вот так отвлекайся на телефон :S...

Добавлено: 24 апр 2007, 22:48
aissp
абсолютно не буду = бо задача реальная, просто решил проексплуатировать оьщественность, самому не думать не проверять некогда к сожалению и так зашиваюсь с редизайном одной программулки :lol:

а ну да естсественно это должно работать, бо говорящих жаб не быват. однако хочеться красивого решенница :) чтоп взглянул и протащился 8)

Добавлено: 24 апр 2007, 22:53
Froggy
aissp писал(а):.....бо говорящих жаб не быват.
быват... :D

Добавлено: 24 апр 2007, 22:55
Marmot
Froggy писал(а):
aissp писал(а):.....бо говорящих жаб не быват.
быват... :D
Кто ее сюда впустил? Признавайтесь... :lol:

PS а я думал чужие тут не ходють...

Добавлено: 24 апр 2007, 22:58
Froggy
хочется иногда сюрреализьма...зайдешь сюда - ну ничегошеньки не понятно, ваще, зато возникает что-то странное, неземное..... :)

Добавлено: 24 апр 2007, 23:01
Marmot
Froggy писал(а):хочется иногда сюрреализьма...зайдешь сюда - ну ничегошеньки не понятно, ваще, зато возникает что-то странное, неземное..... :)
Ндаа, представляю как непосвященые воспринимают такую, например фразу:
чтобы другая библиотека его скушала более эффективно чем почленным копированием
:lol: :roll:

Добавлено: 24 апр 2007, 23:11
Azazello
Marmot писал(а):Ндаа, представляю как непосвященые воспринимают такую, например фразу:...
Вспомнилось старое... Разговор двух adminов:
"-Я вчера весь день с "мамой" трахался...
- И как?
- Да сдохла, сука..."

Добавлено: 25 апр 2007, 11:53
sz
aissp писал(а):Есть еше текузее решение, поскольку на перформанс ето не влияет оставить цикл и не забивать свою голову, но хочется как лучше :)
А лучше оставить цикл. Все равно, никто не знает, что лучше для перформанса. Так что, лучше и не заморачиваться.

Когда я только пришел в EA, мне дали кусок кода и сказали, посмотри, что можно оптимизировать.
Ну я посмотрел - там битовые маски копируются при присвоении. Ага, думаю, сейчас я им референс каунтинг сделаю и избавлюсь от копирования. Ну сделал. Стало работать медленнее.
Потому что копирование все в кеше делается, а референс каунтинг делает if, да еще и по памяти скачет как горный козел.
В общем, я сейчас если вижу копирование, то думаю о замене на ссылку только если там больше килобайта, а в остальных случаях, даже и задумываться незачем.

Добавлено: 25 апр 2007, 12:06
aissp
Так и сделал, тока оформил функцией чтобы вернуться когда нибудь потом. Или не вернуться