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

#define catalog - C++

Восстановить пароль Регистрация
 
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
07.11.2013, 17:13     #define catalog #1
При разростании проекта возникла проблема.
Есть к примеру 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 минуты
Конкретный пример. Есть по вышеизложенному принципу обьекты:
-находчик_данных_на_скриншоте //Находит и фильтрует нужные области скриншота нужным образом (типа предварительная обработка)

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

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

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

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

-....

Цель - рефакторинг. Чтоб можно было легко и просто писать новый схожий проект используя предыдущие наработки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 17:13     #define catalog
Посмотрите здесь:

C++ define
C++ Не срабатывает #define
C++ #define
define не C++
define C++
C++ #define
C++ c++11 и $define
C++ #define c ::

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
07.11.2013, 17:42     #define catalog #2
Цитата Сообщение от nefton Посмотреть сообщение
Всё работает, всё хорошо. Но тут надо сменить каталог проекта
сдается мне нужно использовать относительные пути
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
07.11.2013, 20:43  [ТС]     #define catalog #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->такаято_функция_распознавателя_ников();
Yandex
Объявления
07.11.2013, 20:43     #define catalog
Ответ Создать тему
Опции темы

Текущее время: 06:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru