|
Заблокирован
|
|||||||||||
препроцессор с++02.09.2011, 19:59. Показов 6925. Ответов 47
Метки нет (Все метки)
Задача:
Сделать так, что бы при определённом условии класс "знал" что его тестируют в консоли, и выводил в неё всю необходимую служебную информацию. В режиме же реальной работы, даже сам код вывода данных в консоль не должен быть скомпилированным. Возникшая сложность: В случаи, если режим работы - тестирование классов, то требуется выполнить некоторую предварительную подготовку приложения к работе. Другими словами - запустить на выполнение некий набор функций. Вопрос: Можно ли так сделать, что бы в случае, если идентификатор (#define) определён - при компиляции будут запущены и выполнены некоторые дополнительные функции? Один из вариантов ответа: Ниже представлен полностью рабочий код. В нём мне удалось реализовать задачу, озвученную выше. Однако, удалось это сделать только при помощи глобального объекта. Меня же интересует, можно ли это сделать как нибудь так, что бы обойтись без глобальных объектов? А так же, к каким проблемам может привести ниже представленный код. Критика кода приветствуется.
Он объявляется, и определяется в глобальном пространстве. Код, выполняемый в его конструкторе - это и есть тот кусок кода, которые запустится в случае, если дефайн будит определён. 1. К каким проблемам могут привести макросы? 2. К каким проблемам может привести создание глобального объекта? 3. Есть ли другие способы добиться аналогичного эффекта, но при этом, вообще не создавая глобальных объектов? 4. Как сделать макросы кросс-платформенными? В частности, нужно избавиться от windows.h в случае, если компилируемый код - не под ос виндовс. Но тогда объект GlobalRun ругнется на незнание функций консоли... Добавлено через 11 минут /зы в строке 75 - опечатка
0
|
|||||||||||
| 02.09.2011, 19:59 | |
|
Ответы с готовыми решениями:
47
препроцессор, #if Препроцессор
|
|
Заблокирован
|
||
| 03.09.2011, 18:06 [ТС] | ||
|
И потом, всякие там тестовые штучки - нужны только разработчикам инструмента. Только на этапе тестирования, и сопровождения. А клиенту и знать ничего об этих деталях не нужно. Ему нужно пользовать продукт в штатном режиме, и весь этот инструмент для клиента - не более, чем внешнее окружение. Клиент хочет сосредоточится на бизнес-логике своего проекта, а не думать о том, что и как ему нужно сначала прописать в main() что бы вся эта система не грохнулась по неизвестным ему причинам.
0
|
||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|||||||||||
| 03.09.2011, 18:13 | |||||||||||
|
мое видение сделать синглтон
тут есть поле для деятельности - наследования, шаблоны, обертка уже этого класса в макросы итп
0
|
|||||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 03.09.2011, 18:17 | ||
|
0
|
||
|
Заблокирован
|
||
| 03.09.2011, 18:28 [ТС] | ||
|
Допустим, когда я делаю #include <iostream> Я никак не вникаю что там внутри, и понятья не имею, как инициализированы глобальные cin и cout Мне вообще это все по барабану! Зато я с большими удобствами могу выводить текст в консольку. Я могу инклудить <iostream> куда угодно, и в каком угодно порядке. Проблем с корректностью работы cin и cout не возникнет. Здесь тоже самое - подключил класс к проекту, все! он уже готов к работе. Все необходимые проверки и тесты были выполнены автоматически. Мне не нужно ничего для этого дополнительно писать. И не нужно ничего знать. Единственное что мне нужно знать - это интерфейс управления классом. alex_x_x, Одиночка у меня достаточно примитивный. Но конкретно с ним проблем покамест ещё не было)
0
|
||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 03.09.2011, 18:42 | |
|
0
|
|
|
Заблокирован
|
||
| 03.09.2011, 19:04 [ТС] | ||
|
Я не пишу: Тааак! Сначала сразу после майна нада сделать coutInitDebug(); И только потом уже можно юзать. Я сейчас нашёл баг в своей идее, придётся исправить: TEST(Режим, функция); Режим будит задаваться личной настройкой хэдера-хозяина класса. И сравниваться с возможными режимами работы макроса. Если этого не сделать, получится что весь код будит тупо тестируемым, либо весь код будит тупо штатным. А нужно, что бы можно было вкл/откл тесты для отдельных классов/модулей. Ладно, резюмируя: я думаю, заюзать инициализацию в хэдере. Если уже потом начнутся косяки какие нибудь, всегда же можно сделать в хедере extern прицепить к проекту ещё один левый спп, и уже в нем проинициализировать глобал указатель. Как то так. А там уже опыт рассудит
0
|
||
|
|
|
| 03.09.2011, 19:05 | |
|
Bers, а почему бы не использовать что-то из уже готового?
![]() http://en.wikipedia.org/wiki/L... frameworks
0
|
|
|
Заблокирован
|
||
| 03.09.2011, 19:37 [ТС] | ||
|
Во-вторых, ради опыта. Ну а когда я уже удовлетворю своё любопытство - тогда я, может быть, действительно перейду на что нибудь готовое.
0
|
||
| 03.09.2011, 19:37 | |
|
Препроцессор #pragma Почему не работает препроцессор? Препроцессор,исключительные ситуации
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|