LINUX.ORG.RU

Сломал мозг

 


0

4

Возвращаясь к предыдущей теме: http://www.linux.org.ru/forum/development/9153691

Этот подход получился неудачным.
Поэтому попробую заново сформулировать вопрос по-другому.

Есть 10-20 материалов, у которых есть свойства p1, p2, ...
(в зависимости от материала набор этих свойств может отличаться).
Это можно задать через struct mat{...}. Также у каждого материала есть вычисляемые функции, т.е. методы (у каждого они разные).
Можно все это обернуть в class на основе виртуального класса.

Все эти материалы нужно будет передавать в процедуру.
Т.к. количество материалов может быть разной,
то необходимо их передавать либо в виде списков, массивов или еще как-то.

Проблема возникает когда я хочу передать массив структур в процедуру, т.к. класс является виртуальным.

Каким методом все это реализовать, чтобы получался код наглядным и простым?
С помощью каких элементов с++ это лучше всего будет сделать. В основном интересует сам подход.

З.ы. Если это возможно, то в рамках стандартного с++98.

★★★★★
Ответ на: комментарий от indie

А я то думал, почему ваши твореният ак тормазят - ах вот оно почему. Ну да, так никто не пишет, кроме всяких там вёдер, либц, сами плюсы разобтают почти так же, но нет же - никто не пишет.

Вы, глупые срыватели покровов такие смешные, что просто пичаль

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

Дык автор топика вполне не плохо запилил:
Сломал мозг (комментарий)

А у тебя говнокод, т.к.:
* долго вникать, что ты там делаешь
* смесь ц и цпп
* нет проверок на результат выделения памяти
* используются типы не по назначению (результат add_id* очевидно должен быт bool вместо uint8_t)
* вероятно даже не компилируется, т.к. не хватает хедеров.
* add_id* - нет проверки выхода за границы буфера
* bind_headres - тоже самое
* set_end - лишнее, т.к. ты и так знаешь где у тебя конец (переменная curr)

из цпп в твоем коде есть только слова class, public и private

indie
()
Ответ на: комментарий от indie

оО, ну очередной ламерок мея собрался учить.

* долго вникать, что ты там делаешь

Ты анскилен.

* смесь ц и цпп

Я клал на твои догаматы анскильных заедушных глупышек.

* нет проверок на результат выделения памяти

Реально? Иди учи матчасть и больше не неси мне тут хрень.

* используются типы не по назначению (результат add_id* очевидно должен быт bool вместо uint8_t)

Реально? С чего это? Нука расскажи мне что такое «тип» bool, а я поржу.

* вероятно даже не компилируется, т.к. не хватает хедеров.

Каких хедеров? Я не юзаю НИ ОДИН ХЕДЕР, кроме притф"а, который часть либц и линкуется сам.

* add_id* - нет проверки выхода за границы буфера

Тотальный анскиллед - man x86, виртпамять и прочее, а так же считать сайзоффы и думать почему оно там не упало.

* bind_headres - тоже самое

Если ты идиот - это не мои проблемы.

* set_end - лишнее, т.к. ты и так знаешь где у тебя конец (переменная curr)

man регистры, кеш.

из цпп в твоем коде есть только слова class, public и private

А так же ещё с десяток фич, начиная от областей видимости касса, всяких конструкторов/хренкторов.

superhackkiller1997
()
Ответ на: комментарий от indie

Дык автор топика вполне не плохо запилил:

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

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

Ясно, тогда вопрос снят.

Zodd ★★★★★
() автор топика
Ответ на: оО, ну очередной ламерок мея собрался учить. от superhackkiller1997

Ты анскилен.


ну ок

Я клал на твои догаматы анскильных заедушных глупышек.


ок

Реально? Иди учи матчасть и больше не неси мне тут хрень.


man malloc

Реально? С чего это? Нука расскажи мне что такое «тип» bool, а я поржу.


Вопрос не в том, что использовать uint8_t нельзя. Использовать int, там где bool - это говнокод

Каких хедеров? Я не юзаю НИ ОДИН ХЕДЕР, кроме притф"а, который часть либц и линкуется сам


Тебе как минимум нужен stdint.h
хедер линкуется? ЛОЛ

Тотальный анскиллед - man x86, виртпамять и прочее, а так же считать сайзоффы и думать почему оно там не упало.


В данном случае этот говнокод отработает. Но реюзать эту функцию нельзя.

Если ты идиот - это не мои проблемы.


слив засчитан

man регистры, кеш.


Ты анскилен.

А так же ещё с десяток фич, начиная от областей видимости касса, всяких конструкторов/хренкторов.


десятка не наберется

indie
()
Ответ на: комментарий от indie

man malloc

Нука, что ты этим хотел сказать.

Вопрос не в том, что использовать uint8_t нельзя. Использовать int, там где bool - это говнокод

uint8_t == bool, осиль это уже и не неси ересь.

Тебе как минимум нужен stdint.h
хедер линкуется? ЛОЛ

Ну какбэ ты не осилил сишку. Ты не осилил хедеры плюсов.

В данном случае этот говнокод отработает. Но реюзать эту функцию нельзя.

Что реюзать нельзя? Всё реюзать можно.

Ты анскилен.

Ты не осилил регистры и кеш, не понимашеь, что взять байтик, который 98% есть в кеше быстрее, чем лезть в стек, либо сливать регистр на end?

десятка не наберется

Реально? классы, списки инициализаций, приведение типов, констрыкторы и прочая байда с методами, фича с именами функций и ещё дохрена чего.

Ну ди, анскилябра, то была инория.

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

Ну какбэ ты не осилил сишку. Ты не осилил хедеры плюсов.
Что реюзать нельзя? Всё реюзать можно.
Ну ди, анскилябра, то была инория.

superhackkiller1997 помоему тебя пора банить за искажение речи.

И почему ты всех обзываешь идиотами, что за манера общаться? Ты случаем не из ПТУ?

1997

Это год твоего рождения?

Zodd ★★★★★
() автор топика
Ответ на: комментарий от Zodd

Нука, где я кого-то назвал идиотом? Я лиш констатировал некторые факты, аля:

Он реально не осилил сишку, не осилил плюсы, не осилил нихрена и спорит со мной, так же как и ты. Причем ладно он говорил что-то вменяемое и мог это доказать, но он делит, как и ты, на ноль.

Никого я не оскарблял, речь не искажал и т.п. Это твой жалкая попытка всплыть, гоня на меня.

Да, год рождения, да я их 3-го класса.

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

Вам похоже корона жмет. Пока не научитесь нормально общаться, мне не о чем с вами говорить.

Zodd ★★★★★
() автор топика
Последнее исправление: Zodd (всего исправлений: 1)
Ответ на: комментарий от superhackkiller1997

Нука, что ты этим хотел сказать.

Ну как бы malloc возвращает разные значения

uint8_t == bool, осиль это уже и не неси ересь.

Ты до сих пор невдупляешь о чем я говорю

Ну какбэ ты не осилил сишку. Ты не осилил хедеры плюсов.

Да, да, расскажи мне про линковку хедеров плюсов. ЛОЛ

Что реюзать нельзя? Всё реюзать можно.

Да, реюзай:

...
int main() {
  for_lor t(sizeof(m_id1_t));
  t.bind_headres(id0_headler, 0);
  t.bind_headres(id1_headler, 1);
  t.add_id0(100123, 100223, 100323);
  t.add_id1(200123, 200223);
  t.set_end();
  t.call();
  return 0;
}

...
int main() { // угадай, где упадет
  for_lor t(100500);
  t.add_id0(100123, 100223, 100323);
  t.add_id1(200123, 200223);
  t.set_end();
  t.call();
  return 0;
}

Говнокод есть говнокод

Ты не осилил регистры и кеш, не понимашеь, что взять байтик, который 98% есть в кеше быстрее, чем лезть в стек, либо сливать регистр на end?

benchmark в студию. оценим, стоит ли это оптимизировать. В любом случае у меня плохие новости - с дизайном ПО у тебя явные проблемы.

Реально? классы, списки инициализаций, приведение типов, констрыкторы и прочая байда с методами, фича с именами функций и ещё дохрена чего.

перечисли все 10. у тебя нет привидения типов в цпп стиле. инициализация в конструкторе и конструктор считаем за одно целое.

indie
()
Последнее исправление: indie (всего исправлений: 1)
Ответ на: комментарий от indie

Ну как бы malloc возвращает разные значения

Какие значения? Удиви.

Ты до сих пор невдупляешь о чем я говорю

Ты сам низнаешь очем гвооришь и объяснить не можешь, ибо ты балабол.

Да, да, расскажи мне про линковку хедеров плюсов. ЛОЛ

Причем тут хедеры? В сешке нужно объявление функций? Не знал. В твоих плюсах нужны, но они есть. gcc -E тебе в помощь.

Ах да, если ты не осилил -std у гцц - это твоя проблема.

Да, реюзай:

Что ты этим хочешь сказать? Ты не забиндил хедлеры - твои проблемы, причем тут реюз? Зафейлился и решил найти хоть что-то?

benchmark в студию. оценим, стоит ли это оптимизировать. В любом случае у меня плохие новости - с дизайном ПО у тебя явные проблемы.

Что ты оценишь? Будет медленнней по объективным причинам - хочешь пиши.

перечисли все 10. у тебя нет привидения типов в цпп стиле. инициализация в конструкторе и конструктор считаем за одно целое.

У меня есть лишнии привидение типов из-за цпп - это раз, это фича цпп, если ты не знал.

А ну да, а то-то они появились позже конструкторов.

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997
return ((curr = (++p)) < end);

эта проверка ничего не делает. curr все равно выходит за границу выделенной памяти, при этом следующий вызов функции add_id0 или add_id1 приведет к повреждению памяти.

for_lor(uint64_t max_size) : begin(malloc(max_size)), curr(begin), end(begin + max_size){}
...
for_lor t(100500);
нет проверки правильности выделения памяти. почитай пожалуйста про функцию malloc по внимательней.
void bind_headres(id_headler_t headler, uint64_t id) {headlers[id] = headler;}
...
void * id0_headler(void * ptr)
почитай, что такое виртуальные функции, паттерн программирования интерфейс.

Ничего ты не используешь и это в очередной раз говорит о твоём неосиляторстве плюсов.

напиши определение наследования, которым ты пользуешься.

попробуй написать любой проект больше 100 строчек.

anonymous
()
Ответ на: комментарий от superhackkiller1997

Какие значения? Удиви.

ну как бы NULL может быть

Ты сам низнаешь очем гвооришь и объяснить не можешь, ибо ты балабол

последний аргумент в споре - это оскорбления. слив засчитан

Причем тут хедеры? В сешке нужно объявление функций? Не знал. В твоих плюсах нужны, но они есть. gcc -E тебе в помощь.

Ах да, если ты не осилил -std у гцц - это твоя проблема.

Ну похоже ты говорил про pre-compiled headers. Вопрос снят.

Что ты этим хочешь сказать?

я хочу сказать, что код говно, дизайн говно и твой класс не реюзабельный.

Ты не забиндил хедлеры - твои проблемы, причем тут реюз? Зафейлился и решил найти хоть что-то?

Дык я же и говорю, что твой код говно. Нет проверок на выходные данные.

Что ты оценишь? Будет медленнней по объективным причинам - хочешь пиши.

Ты эту разницу никак не заметишь, может даже не измеришь.

У меня есть лишнии привидение типов из-за цпп - это раз, это фича цпп, если ты не знал.

Ну хрен с тобой, поверю. Где остальные 9?

indie
()
Последнее исправление: indie (всего исправлений: 1)
Ответ на: комментарий от superhackkiller1997

Мой код сам следит за памятью - ему просто за ней следить не надо, ибо он неуязвим по определению.

что будет если функция create_id0 и create_id1 вызывается произвольное число раз, заранее не определенное? скажем ввод данных от пользователя?

anonymous
()
Ответ на: комментарий от anonymous

эта проверка ничего не делает. curr все равно выходит за границу выделенной памяти, при этом следующий вызов функции add_id0 или add_id1 приведет к повреждению памяти.

Какую такую границу - осиль мапять, маллок там только затем, чтобы ммап у вас не вызвал заглюк мозга. А так да - никаких «повреждений» никакой памяти у меня не будет, а что будет у тебя - не мои проблемы.

нет проверки правильности выделения памяти. почитай пожалуйста про функцию malloc по внимательней.

Осиль матчасть. Я не пишу код для ущербанов, а если ты пишешь - это твои проблемы.

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

Я клал на твои патерны, аля «я анскиллен и не смог осилить что-то сложнее классиков».

попробуй написать любой проект больше 100 строчек.

Удиви.

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

Осиль матчасть. Я не пишу код для ущербанов, а если ты пишешь - это твои проблемы.


а для кого ты пишешь код? для себя? =D

ну ты фактически согласен, что твой код говно?

indie
()
Ответ на: комментарий от superhackkiller1997

От мой скилл плюсов, прям рвётся на ружу.

В следующий раз, когда у тебя что-то начнёт рваться наружу, иди в туалет.

Как минимум, сразу бросается в глаза беда с типами в printf.

Deleted
()
Ответ на: комментарий от indie

ну как бы NULL может быть

Не может.

последний аргумент в споре - это оскорбления. слив засчитан

бла-бла.

Ну похоже ты говорил про pre-compiled headers. Вопрос снят.

Какие нахрен pch, ты что несёшь?

g++ my_code.cpp -std=gnu++11 -E | grep fprintf

я хочу сказать, что код говно, дизайн говно и твой класс не реюзабельный.

Чем не реюзабельный? Ты заюзал не правильно - твои проблемы. Я так же могу уронить любое твоё с++ фуфло. Жалкий балабол.

Дык я же и говорю, что твой код говно. Нет проверок на выходные данные.

Какие такие входные данные? Если ты настолько туп, что неможешь забиндить - твои проблемы.

Ты эту разницу никак не заметишь, может даже не измеришь.

Это мне говорит мистер тотальная анскильность, который даже как маллок работает не осилил понять?

Ну хрен с тобой, поверю. Где остальные 9?

Я написал выше.

superhackkiller1997
()
Ответ на: комментарий от Deleted

В следующий раз, когда у тебя что-то начнёт рваться наружу, иди в туалет.

Ну вообще-то это была ирония. А так да, я не юзая никаких плюсафичей запилил байду, которая лучше фуфла студентов, который представлен тут.

Как минимум, сразу бросается в глаза беда с типами в printf.

Удиви.

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

«%u» - это unsigned int, а не uint8_t. «%lu» - это unsigned long int, а не uint64_t (они могут совпадать, но не обязаны).

Deleted
()
Ответ на: комментарий от superhackkiller1997

мое последнее сообщение в треде

Не может.

:DDDDDD

indie
()
Ответ на: комментарий от Deleted

А я клал на то, что может быть.

Это представления, нужные лишь для вывода, а к типу никакого отношения не имеют.

Как жешь вы на меня нападаете, пиявки. Вот никто не осилил матчасть и все ищут у меня фейлы.

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

А я клал на то, что может быть.

Мы уже поняли, что ты - говнокодер, и что ты гордишься этим =).

Deleted
()
Ответ на: комментарий от Deleted

Очередной искатель моих фейлов с треском слился.

Откуда вы такие берётесь? Вы же «не говнокодеры», вы должны знать матчасть. А ты даже как принтф работает не знаешь, зачем ты такой на свете живёшь? Объясни мне?

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

Тут скорее вопрос, откуда ты взялся. Ты живешь в абстрактном мире, где malloc всегда выделяет память.

Скажи, для кого ты программы пишешь? только честно

indie
()
Ответ на: комментарий от indie

Реально? Я клал на твоё ман. Я знаю как работает маллок и знаю как он может отвалится лучше твоего мана. Ман пишется для неосиляторов типа тебя, которая не учитывают то, как они его юзают.

Поэтому там и написано - чекай ретурн.

superhackkiller1997
()
Ответ на: комментарий от indie

ммап не может отвалится ну никак, если ты ей дал вменяемые аргументы.

Поэтому да, в 80% случаев я не проверяю ммап.

superhackkiller1997
()
Ответ на: комментарий от superhackkiller1997

чтобы ммап у вас не вызвал заглюк мозга.

напиши пожалуйста на mmap, не жалей нас.

anonymous
()
Ответ на: комментарий от superhackkiller1997

Я знаю как работает маллок и знаю как он может отвалится лучше твоего мана

почему тогда не пишешь проверок? на самом деле интересно

anonymous
()
Ответ на: комментарий от superhackkiller1997

ну ок, может ты лучше мана знаешь, но не проверять входные данные, возвращаемые значения - это говнокод. Или ты не согласен?

indie
()
Ответ на: комментарий от superhackkiller1997

зачем ты такой на свете живёшь?

Чтобы выгребать из кода говно, которое написали такие как ты.

Deleted
()
Ответ на: комментарий от Deleted

Но ты обозвал говно том, что на самом деле не говно, а лишь твоё неосиляторство.

Ты не осилил принтф, но осмелился обвинять меня? В этом ваша бида.

superhackkiller1997
()
Ответ на: комментарий от anonymous

Потомучто я знаю, когда и почему он может вернуть мне нулл и только тогда и пишу.

Неосиляторы же не знают и пихают всё подрят, а потом доказывают мне, что у меня нет проверок.

superhackkiller1997
()
Ответ на: комментарий от indie

Я не обязан проверять данные вводимые программистом. Я знаю когда и какие у меня будут значения - мне не нужны твои догадки неосилятора.

Если у меня где-то появляются неопределённые магические значения - я их проверяю в том месте, где они рождаются. А в моём коде у меня неопределённых значений не бывает.

superhackkiller1997
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.