Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.81.240] |
|
Страницы: (32) « Первая ... 12 13 [14] 15 16 ... 31 32 ( Перейти к последнему сообщению ) |
Сообщ.
#196
,
|
|
|
Та неважно, что. И не надо ничего писать, разве что проиллюстрировать идею, например. Как в архитектуру заложить сохранение/восстановление состояний? В конце-концов любая нормальная игра это умеет. Но вот как сие реализовать в своём приложении?
|
Сообщ.
#197
,
|
|
|
Цитата KILLER @ Переформулируй, не понял ответа твоего, вернее могу не так ответить, так как не понял смысла того что ты написал. В общем переформулируй вопрос. Ок, в последний раз. Во фразе говорится об одном из критериев, соответствие коду которому говорит о том, что код стоит вынести в отдельный метод. Об одном из. Это не значит, что не существуют других критериев, и, как следствие - не значит, что большой код, написанный один раз, я разбивать не буду. |
Сообщ.
#198
,
|
|
|
Сообщ.
#199
,
|
|
|
Сообщ.
#200
,
|
|
|
Цитата Qraizer @ Та неважно, что. И не надо ничего писать, разве что проиллюстрировать идею, например. Как в архитектуру заложить сохранение/восстановление состояний? В конце-концов любая нормальная игра это умеет. Но вот как сие реализовать в своём приложении? Это любопытно, но при чем тут goto? Добавлено Цитата KILLER @ Забавно |
Сообщ.
#201
,
|
|
|
рискну предположить, что тройной for можно заменить while с ручным инкрементом - необходимость в гоуту отпадёт
|
Сообщ.
#202
,
|
|
|
Да там вообще просто переделать инициализацию i,j,k и все. То, что с goto читабельнее - вопрос спорный
|
Сообщ.
#203
,
|
|
|
int i = j = k = 0; restorePrevious(&i, &j, &k); while(i<10) { while(j<10) { while(k<10) { k++; } j++; k = j; } i++; j = i; k = j; } оно? |
Сообщ.
#204
,
|
|
|
_lcf_, тут еще вопрос с масштабированием. Решение Qraizer'а позволяет сохранять много всякой херни, загружать много всякой херни и работать дальше. Как бы в твоем случае мы будем чуть ли не с каждой переменной вручную разбираться.
|
Сообщ.
#205
,
|
|
|
for (int i = isInit ? initValue : 0; i < 10; i++) for (int j = isInit ? initValue : i; j < 10; j++) for (int k = isInit ? initValue : j; k < 10; k++) компилятор сиё оптимизирует? |
Сообщ.
#206
,
|
|
|
У них разные initValue
По поводу оптимизации - надо мерить. Добавлено Пока получается что-то вроде того: int i = 0, j = 0, k = 0; if (restore(&i, &j, &k)) goto resume; for(i = 0; i < 10; ++i) { for (j = i; j < 10; ++j) { for(k = j; k < 10; ++k) { resume: // ... } } } vs int i = 0, j = 0, k = 0; restore(&i, &j, &k); for(; i < 10; ++i, j = i, k = j) { for (; j < 10; ++j, k = j) { for(; k < 10; ++k) { // ... } } } vs int init_i = 0, init_j = 0, init_k = 0; bool is_init = restore(&init_i, &init_j, &init_k); for(int i = is_init ? init_i : 0; i < 10; ++i) { for (int j = is_init ? init_j : i; j < 10; ++j) { for(int k = is_init ? init_k : j; k < 10; ++k) { // ... } } } Мне кажется, что вариант с goto понятнее... Хотя второй тоже неплох, на мой взгляд. |
Сообщ.
#207
,
|
|
|
Цитата D_KEY @ _lcf_, тут еще вопрос с масштабированием. Решение Qraizer'а позволяет сохранять много всякой херни, загружать много всякой херни и работать дальше. Как бы в твоем случае мы будем чуть ли не с каждой переменной вручную разбираться. Э-м… Так там же тоже с каждой переменной вручную разбираются: ok = ok && inFile.read(reinterpret_cast<char*>(&i), sizeof(i)).gcount()==sizeof(i); ok = ok && inFile.read(reinterpret_cast<char*>(&j), sizeof(j)).gcount()==sizeof(j); ok = ok && inFile.read(reinterpret_cast<char*>(&k), sizeof(k)).gcount()==sizeof(k); // ... ok = ok && outFile.write(reinterpret_cast<char*>(&i), sizeof(i)).good(); ok = ok && outFile.write(reinterpret_cast<char*>(&j), sizeof(j)).good(); ok = ok && outFile.write(reinterpret_cast<char*>(&k), sizeof(k)).good(); |
Сообщ.
#208
,
|
|
|
Цитата korvin @ Цитата D_KEY @ _lcf_, тут еще вопрос с масштабированием. Решение Qraizer'а позволяет сохранять много всякой херни, загружать много всякой херни и работать дальше. Как бы в твоем случае мы будем чуть ли не с каждой переменной вручную разбираться. Э-м… Так там же тоже с каждой переменной вручную разбираются: ok = ok && inFile.read(reinterpret_cast<char*>(&i), sizeof(i)).gcount()==sizeof(i); ok = ok && inFile.read(reinterpret_cast<char*>(&j), sizeof(j)).gcount()==sizeof(j); ok = ok && inFile.read(reinterpret_cast<char*>(&k), sizeof(k)).gcount()==sizeof(k); // ... ok = ok && outFile.write(reinterpret_cast<char*>(&i), sizeof(i)).good(); ok = ok && outFile.write(reinterpret_cast<char*>(&j), sizeof(j)).good(); ok = ok && outFile.write(reinterpret_cast<char*>(&k), sizeof(k)).good(); Ну это только в плане сохранения/загрузки. А так тебе придется еще в логике учитывать. В данном случае - по особому работать со счетчиками циклов. |
Сообщ.
#209
,
|
|
|
Цитата D_KEY @ Мне кажется, что вариант с goto понятнее... O_O' Чем он понятней? Только тем, что там выход из трёх циклов? Ну так достаточно весь этот код вынести из main в отдельную процедуру и использовать return. В goto-версии циклы начинаются с нуля. Если вдруг при чтении файла что-то пойдёт не так и загрузятся неправильные значения счётчиков (ниже нуля), то получим баг. Добавлено Цитата D_KEY @ Ну это только в плане сохранения/загрузки. А так тебе придется еще в логике учитывать. В данном случае - по особому работать со счетчиками циклов. При чтении их инициализирующих значений извне, с ними нужно по-особому работать. Чтобы это было явно отражено в коде. |
Сообщ.
#210
,
|
|
|
Есть еще вариант со switch
Не проверял, мог опечататься int i = 0, j = 0, k = 0; switch (restore(&i, &j, &k)) case 0: for(i = 0; i < 10; ++i) { for (j = i; j < 10; ++j) { for(k = j; k < 10; ++k) { default: // ... } } } } Вряд ли кто-то скажет, что он понятнее варианта с goto |