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

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

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

Сообщение 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; 
...
}
вопросы про дурной дизайн с гневом отметаются :)
Аватара пользователя
sz
Маньяк
Сообщения: 1266
Зарегистрирован: 17 фев 2003, 19:34

Сообщение sz »

A& operator=( A& a, const B& b )
{
// преобразуй, как нужно.
}
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

А помоему, aissp-у хочется байтики за раз помувить, но чтоб красиво :)
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

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

Сообщение ajkj3em »

а чем собсно такая красота не устраивает ? -

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

internal_func_for_filling_bb(*(B*)&a);
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Сообщение aissp »

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

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

Есть еше текузее решение, поскольку на перформанс ето не влияет оставить цикл и не забивать свою голову, но хочется как лучше :)
Аватара пользователя
Azazello
Житель
Сообщения: 769
Зарегистрирован: 16 янв 2007, 04:31

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

Сообщение Azazello »

ajkj3em писал(а):а чем собсно такая красота не устраивает ? -

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

internal_func_for_filling_bb(*(B*)&a);
Только через reinterpret_cast, чтоб aissp не ругался ;)...
Edit: блин, вот так отвлекайся на телефон :S...
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Сообщение aissp »

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

а ну да естсественно это должно работать, бо говорящих жаб не быват. однако хочеться красивого решенница :) чтоп взглянул и протащился 8)
Froggy
Графоман
Сообщения: 8989
Зарегистрирован: 27 июл 2006, 21:11
Откуда: SPb-Vancouver

Сообщение Froggy »

aissp писал(а):.....бо говорящих жаб не быват.
быват... :D
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

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

PS а я думал чужие тут не ходють...
Froggy
Графоман
Сообщения: 8989
Зарегистрирован: 27 июл 2006, 21:11
Откуда: SPb-Vancouver

Сообщение Froggy »

хочется иногда сюрреализьма...зайдешь сюда - ну ничегошеньки не понятно, ваще, зато возникает что-то странное, неземное..... :)
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

Froggy писал(а):хочется иногда сюрреализьма...зайдешь сюда - ну ничегошеньки не понятно, ваще, зато возникает что-то странное, неземное..... :)
Ндаа, представляю как непосвященые воспринимают такую, например фразу:
чтобы другая библиотека его скушала более эффективно чем почленным копированием
:lol: :roll:
Аватара пользователя
Azazello
Житель
Сообщения: 769
Зарегистрирован: 16 янв 2007, 04:31

Сообщение Azazello »

Marmot писал(а):Ндаа, представляю как непосвященые воспринимают такую, например фразу:...
Вспомнилось старое... Разговор двух adminов:
"-Я вчера весь день с "мамой" трахался...
- И как?
- Да сдохла, сука..."
Аватара пользователя
sz
Маньяк
Сообщения: 1266
Зарегистрирован: 17 фев 2003, 19:34

Сообщение sz »

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

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

Сообщение aissp »

Так и сделал, тока оформил функцией чтобы вернуться когда нибудь потом. Или не вернуться
Ответить