Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194

#define catalog

07.11.2013, 17:13. Показов 708. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При разростании проекта возникла проблема.
Есть к примеру 10 папок. В каждой есть файл типа *.h с названием обьекта и соответственно описывает этот обект.
Кроме того в каждом обьекте используется чтение из файлов, расположенных в подпапке.

Не по теме:

Папка_обьектов:
-папка_обьект_1:
-обьект_1.h
-папка_символы_обьекта_1:
-символ_1.png
-символ_2.png
-символ_3.png
-....
-папка_обьект_2:
-обьект_2.h
-папка_символы_обьекта_2:
-символ_1.png
-символ_2.png
-символ_3.png
-....
-папка_обьект_3:
-обьект_3.h
-папка_символы_обьекта_3:
-символ_1.png
-символ_2.png
-символ_3.png
-....


В каждом файле *.h есть фраза
C++
1
#define catalog "d:/My_project/Папка_обьектов/Папка_обьект_1/папка_символы_обьекта_1/"
Всё работает, всё хорошо. Но тут надо сменить каталог проекта... Ладно, допустим это через 1 define я решу.
Но дело развилось дальше, и меня не устраивают куча папок с обьектами. Я хочу сделать 1 глобальный обьект в котором сделаю по экземпляру каждого обьекта (мне в программе так и надо собственно) и они будут выполнять свои функции.

Но как??? как надо изначально писать обьекты чтоб их легко инкапсулировать и использовать в других программах?

Добавлено через 4 минуты
Конкретный пример. Есть по вышеизложенному принципу обьекты:
-находчик_данных_на_скриншоте //Находит и фильтрует нужные области скриншота нужным образом (типа предварительная обработка)

-распознаватель ника игрока //должен подгружать символы в память для распознавания их

-распознаватель стека игрока //тоже

-распознаватель хода игрока //тоже

- распознаватель номера сдачи //тоже

-....

Цель - рефакторинг. Чтоб можно было легко и просто писать новый схожий проект используя предыдущие наработки
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2013, 17:13
Ответы с готовыми решениями:

c++11 и $define
Есть код который прекрасно компилируется без -std=c++11, но как только я включаю эту опцию то константы препроцессора не заменяются и...

define
Всем здрасьте , что означает эта строчка? #define MAX(a,b) a>b? a:b

define
И еще такой вопрос для чего служит #define ??

2
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
07.11.2013, 17:42
Цитата Сообщение от nefton Посмотреть сообщение
Всё работает, всё хорошо. Но тут надо сменить каталог проекта
сдается мне нужно использовать относительные пути
0
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
07.11.2013, 20:43  [ТС]
Цитата Сообщение от Raali Посмотреть сообщение
сдается мне нужно использовать относительные пути
Это решит проблему переноса всего проекта в другую папку, но не проблему реорганизации.

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

Да, скажут так не делается. классы должны както наследоватся. Но как в данном конкретном случае поступить правильно? Чтоб потом было минимум проблем.

Добавлено через 1 час 16 минут
Итак. решение найдено. это не #define

как думаете что выведет код
C++
1
2
3
4
5
6
#define a "10"
#define b a##"-8"
#undef a
#define a "30"
 
cout<<"b= "<<b<<endl;
выводит "30-8". Вот так то. Никакой вложенности или рекурсии тут не получится

Решение вижу в 2 пунктах.
1. Условится держать папку "Символы_для_распознавания_ника" рядом с файлом "распознавальшик_ника.h"
2. В конструктор ввести аргумент
C++
1
char* dirrectory_of_object
Тогда распознавальшик
C++
1
2
3
4
5
6
7
8
9
10
11
class Raspoznavatel_nika{
   public:
      Raspoznavatel_nika(char* catalog);
}
Raspoznavatel_nika::Raspoznavatel_nika(char* catalog){
    char put_k_failu[255];
    for (int i=0; i<=10; i++){ 
       sprintf(put_k_failu, "%s/Символы_для_распознавания_ника/%d.png", catalog, i);
       тут читаем наш символ в память
    }
}
Вызов из main:
C++
1
2
#include "Обьекты/Распознаватель_ника/Распознаватель_ника.h"
Raspoznavatel_nika my_raspoznavatel_nika("Обьекты/Распознаватель_ника");
Теперь мы решили создать более глобальный класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Raspoznavatel_vsego_stola{
   public:
      Raspoznavatel_vsego_stola(char* catalog);
      Raspoznavatel_nika my_raspoznavatel_nika;
 
}
 
Raspoznavatel_vsego_stola::Raspoznavatel_vsego_stola(char* directory){
      char buff[255];
      sprintf(buff, "%s/Распознаватель_ника", directory);
      my_raspoznavatel_nika.Raspoznavatel_nika(buff);
}
вызов с main

C++
1
2
#include "Обьекты/Распознаватель_всего_стола/Распознаватель_всего_стола.h"
Raspoznavatel_vsego_stola my_raspoznavatel_vsego_stola("Обьекты/Распознаватель_всего_стола");
И оп-ля! в результате глобализации я не трогаю файл распознаватель_ника.h !!! что и требовалось

Добавлено через 1 час 33 минуты
Маленькая поправка

Теперь мы решили создать более глобальный класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Raspoznavatel_vsego_stola{
   public:
      Raspoznavatel_vsego_stola(char* catalog);
      Raspoznavatel_nika* my_raspoznavatel_nika;
 
}
 
Raspoznavatel_vsego_stola::Raspoznavatel_vsego_stola(char* directory){
      char buff[255];
      sprintf(buff, "%s/Распознаватель_ника", directory);
      my_raspoznavatel_nika = new Raspoznavatel_nika(buff);
}
вызов с main

C++
1
2
3
#include "Обьекты/Распознаватель_всего_стола/Распознаватель_всего_стола.h"
Raspoznavatel_vsego_stola my_raspoznavatel_vsego_stola("Обьекты/Распознаватель_всего_стола");
cout<<my_raspoznavatel_vsego_stola.my_raspoznavatel_nika->такаято_функция_распознавателя_ников();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2013, 20:43
Помогаю со студенческими работами здесь

define не
Здравствуйте. &quot;Дефайню&quot; &quot;%f&quot; для вывода: #define fss &quot;%f&quot;; . И потом делаю вывод вот такой вот: for(i=0;i&lt;n;i++)...

#define
Здравствуйте, дорогие программисты! сразу хочу сказать, что в С++ я совсем недавно, поэтому толком ничего не знаю Во-первых,...

C++define
Люди добрые , помогите советом ! Фрагмент с кодом самого метода : #include &lt;iostream&gt; // для std :: cout #include...

#define c ::
Подскажите как реализовать такую замену: #define sa2::sys::getClientKernel()-&gt;getXDBTManager() cls_SimpleXDBTManager::Instance() ...

#define
ребята, подскажите, вернее пролейте свет, на то , как это работает... #include &lt;iostream&gt; #define str(x) #x using namespace...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru