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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 189
#1

#define catalog - C++

07.11.2013, 17:13. Просмотров 368. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 17:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос #define catalog (C++):

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

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

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

define не - C++
Здравствуйте. "Дефайню" "%f" для вывода: #define fss "%f"; . И потом делаю вывод вот такой вот: for(i=0;i<n;i++) fscanf(in,fss,&a->di);. И...

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

#define - C++
#define зачем нужна это заголовочный файл какие у него функции и как им ползоватса?

2
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,062
Завершенные тесты: 1
07.11.2013, 17:42 #2
Цитата Сообщение от nefton Посмотреть сообщение
Всё работает, всё хорошо. Но тут надо сменить каталог проекта
сдается мне нужно использовать относительные пути
0
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 189
07.11.2013, 20:43  [ТС] #3
Цитата Сообщение от 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2013, 20:43
Привет! Вот еще темы с ответами:

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

Не срабатывает #define - C++
Почему не срабатывает #define и как исправить ? #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;Tennis.h&quot; #define LIM 20 using...

массивы в define - C++
Ребят, подскажите плиз. Имеется программа для работы с неким исполнительным механизмом посредством СОМ-порта из-под никсов. Форматы...

поясните по #define - C++
У меня есть super class Animals и два подкласса Cats и Birds крайне похожие в реализации. Так вот хочу сделать так: в файле &quot;Birds.h&quot;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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