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

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

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

#define catalog - C++

07.11.2013, 17:13. Просмотров 350. Ответов 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 минуты
Конкретный пример. Есть по вышеизложенному принципу обьекты:
-находчик_данных_на_скриншоте //Находит и фильтрует нужные области скриншота нужным образом (типа предварительная обработка)

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

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

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

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

-....

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

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

Нелепые define-ы - C++
Вопрос... Какой смысл в таких define-ах? Чтобы никто ни черта не понял? оО #define _TRY_BEGIN try { #define _CATCH(x) } catch (x)...

#define и clrscr() - C++
Добрый день! В прошлый раз мне тут здорово помогли...вот и сейчас, надеюсь на помощь. Коллега, который писал код, уволился. В мне...

#define and debug_mode - C++
Столкнулся с необходимостью использовать при отладке довольно внушительные куски кода. (ранее решил проблему с мелкими кусками)(смотри...

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

#define VS inline - C++
Что работает быстрее: #define SQR(x) x*x void Func() { for(int i = 0; i < 10; ++i) { cout << SQR(i) << endl; ...

Директивы define - C++
Рассматривая настоящую объемную программу, наткнулся на огромное количество файлов с длинным списком директив #define. Можете вкратце...

Const #define - C++
{ const int HOLFSDsize= 2;//#define HOLFSDsize 2 // m-угольник void HOLFSD() { int i, n, l; // объявляем...

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

Синтаксис использования #define - C++
#include <iostream> #define LOG_ALL 0; #define LOG_MIDDLE 1; #define LOG_MAIN 2; #define LOG_NONE 3; static int...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 1
07.11.2013, 17:42     #define catalog #2
Цитата Сообщение от nefton Посмотреть сообщение
Всё работает, всё хорошо. Но тут надо сменить каталог проекта
сдается мне нужно использовать относительные пути
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 188
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
Ответ Создать тему
Опции темы

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