Модульные проекты на C++ [закрыт]

183
04 марта 2022, 18:20
Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 2 года назад.

Улучшить вопрос

Долгое время ищу информацию о создании модульного проекта на C++.

Т.е., чтобы реализовать следующее:

1) Создать ядро программы

2) Создать два модуля (например, nmHashCounter и xxHashCounter)

3) В зависимости от того, какой модуль заинклуден - выполнять действия в модуле, если заинклудены оба - вылетать в ошибку при компиляции.

4) Если же не один из модулей не заинклуден, то выполнять стандартные действия.

Например,

есть класс User с функцией DoSMTH, которая по умолчанию выдает надпись "You're Welcome!".

Мы инклудим DiabloModule, и теперь при вызове DoSMTH будет появляться "Welcome to HELL!".

Как это реализовать?

Есть ли идеи?

Спасибо, хорошего дня!

Answer 1

Вот вам простейший вариант. Есть масса более хитрых, но зачем сложно, если можно просто? :)

FIRST.HPP

#pragma once
#include <iostream>
inline void doIt(int)
{
    std::cout << "Hello First\n";
}

SECOND.HPP

#pragma once
#include <iostream>
inline void doIt(int)
{
    std::cout << "Hello Second\n";
}

MAIN.CPP

#include <iostream>
//#include "first.hpp"
//#include "second.hpp"
using namespace std;
template<typename T>
void doIt(T)
{
    cout << "Hello, World\n";
};
int main(int argc, const char * argv[])
{
    doIt(0);
}

Оставите как есть - выведет Hello, World.
Уберете комментарий с #include "first.hpp" - выведет Hello First.
Уберете комментарий с #include "second.hpp" - выведет Hello Second.

Уберете оба комментария - не скомпилируется.

Примерно то же самое можно для классов, других функций и т.п.

Варианты посложнее - например, когда каждый модуль регистрируется в основной программе - правда, проверка при этом уже на уровне выполнения. Но вполне можно добавить вот такие же одинаковые функции именно для единственности модуля.

И C++17 тут совершенно ни к чему. Это и C++03 умел - ведь inline я использовал, по сути, чтоб ограничиться .hpp-файлами :)

READ ALSO
Как отправить данные через USB?

Как отправить данные через USB?

Я хочу отправить данные через USB на ArduinoСам микроконтроллер запрограммирован ждать сигнал с serial-порта

86
Расшифровка названий C++

Расшифровка названий C++

Есть ли сайт где указаны все расшифровки названий для C++ (например как расшифровывается cout = console output; endl = end line; iostream = input output stream и тд

81
rvalue в параметр функции

rvalue в параметр функции

У меня имеется unique_ptr, который передаётся в функцию по значению

57
Как остановить поток?

Как остановить поток?

Как сделать чтоб поток переставал выполняться когда ЛКМ перестает быть зажата? Есть такой код:

95