Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
dvano
131 / 62 / 16
Регистрация: 18.06.2014
Сообщений: 216
Завершенные тесты: 1
#1

Оценить код - C++

01.04.2016, 23:06. Просмотров 387. Ответов 5
Метки нет (Все метки)

Добрый день. В данный момент пишу Ray tracing. Если у вас есть время, оцените код. Какие советы вы можете дать? Что можно улучшить(исправить)? Как бы вы сделали ту или иную вещь?
[cut]
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2016, 23:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оценить код (C++):

Как получить исходный код *.exe или отредактировать его исполняемый код? - C++
Собственно возможно ли декомпилить его так, чтобы можно было потом обратно скомпилировать? Или хотя-бы отредактировать код, только не...

Написал код в Full Debug, потом переделал в Release - и написанный код не работает - C++ Builder
Кто сталкивался с проблемой, написал код в Full Debug потом переделал в Release и написанный код не работает (((

Перенести код из VC++ в CPP Builder (код использует DLL) - C++ Builder
Такая проблема. Есть DLL + пример её использования на Visual C++, пытаюсь этот пример перенести в Builder. Проблемы возникают в самом...

Переобразовать код С++ в код на Javascript - C++ Builder
Здравствуйте! У меня такая вот проблема, начеркал прогу на С++ Билдер (embarcadero) теперь пришлось запускать эту программу на виндовс ...

Оценить корретность программы. - Visual C++
Программа делает след.:1-переводит часы в минуты,2-считает угол между часовой стрелкой и минутной, 3-ничего не делает.Оцените ...

Прошу оценить готовую программу - Visual C++
Сразу скажу, что я - типичный быдлокодер, никогда не разрабатывавший реальных приложений, поэтому попрошу быть снисходительнее. Тестил её...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ct0r
Игогошка!
1773 / 675 / 42
Регистрация: 19.08.2012
Сообщений: 1,287
Завершенные тесты: 1
02.04.2016, 12:44 #2
Где тесты, документация?
Зачем пихать во все места noexcept, final, pimpl?
1
dvano
131 / 62 / 16
Регистрация: 18.06.2014
Сообщений: 216
Завершенные тесты: 1
02.04.2016, 12:54  [ТС] #3
Цитата Сообщение от ct0r Посмотреть сообщение
Зачем пихать во все места noexcept, final, pimpl?
А почему бы не впихнуть noexcept туда, где исключения отсутствуют? И к тому же уменьшает количество кода, который генерирует компилятор. Там где не нужно наследование - final. Pimpl позволяет скрыть весь мусор в cpp.
0
ct0r
Игогошка!
1773 / 675 / 42
Регистрация: 19.08.2012
Сообщений: 1,287
Завершенные тесты: 1
02.04.2016, 13:33 #4
Цитата Сообщение от dvano Посмотреть сообщение
А почему бы не впихнуть noexcept туда, где исключения отсутствуют?
Они не просто должны там отсутствовать сейчас. Ты должен понимать, что они будут там отсутствовать и в будущем. Иначе будут проблемы с сопровождением.

Цитата Сообщение от dvano Посмотреть сообщение
И к тому же уменьшает количество кода, который генерирует компилятор.
Конкретно у тебя какой от этого профит? Ты замерял? Он важен?

Цитата Сообщение от dvano Посмотреть сообщение
Там где не нужно наследование - final.
А тут в чем профит? Показать, что класс не будет базовым? Ну спасибо, очень ценная инфа. final не для этого был придуман.

Цитата Сообщение от dvano Посмотреть сообщение
Pimpl позволяет скрыть весь мусор в cpp.
Если у тебя много мусора в cpp, то нужно бороться с причиной, а не прятать последствия. pimpl используется для предоставления API с устойчивым ABI, а также для сокращения времени компиляции. Пока не вижу у тебя таких нужд.
2
hoggy
Нарушитель
6580 / 2761 / 476
Регистрация: 15.11.2014
Сообщений: 6,105
Завершенные тесты: 1
02.04.2016, 16:22 #5
Цитата Сообщение от dvano Посмотреть сообщение
оцените код
в целом: код приятен.
с точки зрения чтения, и восприятия,
можно назвать образцово показательным.

Цитата Сообщение от dvano Посмотреть сообщение
Какие советы вы можете дать? Что можно улучшить(исправить)?
можно убить сразу же трех зайцев,
если добавить дополнительную папку,
которая содержала бы примеры использования.

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

с другой - они так же могут выступать в качестве юнит-тестов продукта,
и гарантировать его работоспособность.

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

Цитата Сообщение от dvano Посмотреть сообщение
Как бы вы сделали ту или иную вещь?
рассмотрим код:
C++
1
void insertObject(std::unique_ptr<RenderObject>&& renderObject) noexcept;
такие вещи на мой взгляд лучше прятать в приваты.
потому что std::unique_ptr в данном случае - это деталь реализации.

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

вместо этого:
C++
1
2
3
4
5
6
7
scene.insertObject(
    std::make_unique<Sphere>(
        vec3f{0.0F, 0.0F, 100.0F}, 
        vec3f{0.0F, 0.0F, 255.0F}, 
        50.0F
    )
);
вот такое:
C++
1
2
3
4
5
6
7
// укажите тип объекта, который нужно вставить
// и список аргументов с которыми он должен быть построен
scene.insertObject<Sphere>(
    vec3f{0.0F, 0.0F, 100.0F}, 
    vec3f{0.0F, 0.0F, 255.0F}, 
    50.0F
);
запись получается короче, что уже удобнее само по себе.
и не содержит намеков на детали реализации.

достичь этого можно за счет статической фабрики:

C++
1
2
3
4
5
6
7
8
template<class RenderObject_, class ...Args>
void insertObject(Args&&... args) noexcept
{
    // вызываем приватную деталь реализации
    this->insertObject(
        std::make_unique<RenderObject_>( std::forward<Args>(args)... )
    );
}
получаем тоже самое,
но пользователям больше не нужно знать о факте использования std::unique_ptr.
а вы соответственно, не имеете легаси в связи с этим.
1
ct0r
Игогошка!
1773 / 675 / 42
Регистрация: 19.08.2012
Сообщений: 1,287
Завершенные тесты: 1
02.04.2016, 17:35 #6
Еще глянул.

1) Почти не видно DbC (Design-by-Contract) и DP (Defensive Programming).
2) move ctors и move assignment operators написаны совершенно бессмысленно.
3) Если уж делаем pimpl, то почему без поддержки перемещений? И зачем там еще в присваивании постоянно делать новый unique_ptr?

Остальное вроде окей.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2016, 17:35
Привет! Вот еще темы с ответами:

Как оценить ширину текста, выводимого функцией TextOut? - C++ WinAPI
Как оценить ширину текста, выводимого функцией TextOut?

Просьба оценить код - C++
Данный код реализует массивы, размеры которых можно легко изменять, а так же которые можно легко склеивать. Прошу оценить его и...

.NET 4.x Оценить код многопоточности - C#
Имеется вот что-то тип такого дела: using System; using System.ComponentModel; using System.Windows.Forms; using...

Просьба оценить код - Delphi
Задача запуск 2 программ. Запускаем первую программу с праметрами, ждем ее окончания, и только потом запускаем вторую program...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.04.2016, 17:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru