Структура проекта в C ++ относительно открытых заголовков - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь понять структуру проекта в c ++, мне трудно разобраться со структурой классов и заголовочными файлами.

Извлечение из статьи 1 (ссылка внизу этого поста)

По соглашению, include-каталог предназначен для заголовочных файлов, но современная практика> предполагает, что include-каталог должен строго содержать заголовки, которыенужно публично раскрыть.

Мой первый вопрос об этом процессе касается отдельного файла классов, который находится в каталоге include.

Какова цель разоблачения ваших заголовков?

Исходя из этого, рассмотрим пример открытого заголовочного файла.Связано в следующем репозитории GH: https://github.com/AakashMallik/sample_cmake

Как класс Game_Interface связан с Game_Engine?

game_interface.h

#pragma once

#include <game_engine.h>

class GameInterface
{
  private:
    GameEngine *game;

  public:
    GameInterface(int length);
    void play(int num);
};

Я смотрел еще гдедля простого объяснения этого процесса, но все, что я до сих пор нашел, это ничего, что можно понять в контексте этого примера.

Довольно новый для C ++ опыт работы в веб-технологиях.

Ссылка на статью 1: https://medium.com/heuristics/c-application-development-part-1-project-structure-454b00f9eddc

1 Ответ

0 голосов
/ 07 мая 2019

Какова цель разоблачения ваших заголовков?

Иногда вы можете разрабатывать какую-то функциональность или библиотеку.Возможно, вы захотите помочь другому человеку, клиенту или клиенту, поделившись функциональностью вашего кода.Но вы не хотите делиться точными рабочими деталями.

Так, например, вы хотите поделиться функцией обработки изображений, которая применяет к ней красивые фильтры.Но в то же время вы не хотите, чтобы они точно знали, как вы это реализовали.для таких сценариев вы можете создать заголовочный файл, скажем, img_filter.h с объявлением функции -

bool ApplyFilter(const string & image_path);  

Теперь вы можете реализовать все детали в img_filter.cpp:

bool ApplyFilter(const string & image_path)
{
....
    // Implementation detail
...
}

Далее выможете подготовить dll этого файла, который мог бы использовать ваш клиент.Для справки работы, параметров, использования и т. Д. Вы можете поделиться img_filter.h.

Связь с интерфейсом:
Хорошо иметь хорошо определенный интерфейс, поэтому вы можете прозрачно изменять детали реализации, что означает, что HOW вы реализуетедетали не имеют значения, пока интерфейс или имя функции и параметры остаются неизменными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...