💻 Exemplos: Capítulo 19: Módulos do C++20 e Engenharia de Build com CMake Moderno
💻 Exemplos: Capítulo 19: Módulos do C++20 e Engenharia de Build com CMake Moderno
Especialização em Sistemas com C++ • Demonstrações Práticas Compiláveis
🎯 Objetivo dos Exemplos
Apresentar a substituição definitiva do modelo frágil de inclusão textual #include pelos Módulos do C++20 (export module, import), eliminando contaminações de macros de pré-processador e acelerando os tempos de compilação em projetos gigantescos, acompanhado da configuração industrial com CMake Moderno (3.28+).
1. Código Fonte Completo
Arquivo 1: engine.ixx (Interface do Módulo C++20)
/**
* @file engine.ixx
* @brief Unidade de interface de módulo C++20 (Module Interface Unit).
*/
export module telemetry.engine;
import <iostream>;
import <string>;
import <cstdint>;
export namespace Telemetry {
struct MetricasCluster {
std::uint64_t total_transacoes;
double tempo_medio_us;
};
class MotorProcessamento {
private:
std::string m_id_servico;
public:
explicit MotorProcessamento(std::string id) : m_id_servico(std::move(id)) {}
void inicializar() const {
std::cout << "[Modulo telemetry.engine] Motor '" << m_id_servico
<< "' inicializado via C++20 Modules!" << '\n';
}
MetricasCluster coletar() const {
return MetricasCluster{ 1500000ULL, 1.45 };
}
};
} // namespace Telemetry
Arquivo 2: main.cpp (Consumo do Módulo via import)
/**
* @file main.cpp
* @brief Consumo de módulo exportado com import no C++20.
*/
// Sintaxe moderna: sem cabeçalhos .h e sem macros invasivas!
import telemetry.engine;
import <iostream>;
int main() {
std::cout << "=== CAPÍTULO 19: MÓDULOS C++20 E CMAKE MODERNO ===" << '\n';
Telemetry::MotorProcessamento motor("Alpha_Gateway");
motor.inicializar();
auto metricas = motor.coletar();
std::cout << "Total Transacoes: " << metricas.total_transacoes << '\n';
std::cout << "Latencia Media: " << metricas.tempo_medio_us << " microssegundos" << '\n';
return 0;
}
Arquivo 3: CMakeLists.txt (Configuração Canônica C++20 Targets)
cmake_minimum_required(VERSION 3.28)
project(EngineTelemetryApp LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Declaração do executável com Módulos C++20
add_executable(app_modulos main.cpp)
# Registro da unidade de interface de módulo (C++20 File Sets)
target_sources(app_modulos
PUBLIC
FILE_SET cxx_modules TYPE CXX_MODULES FILES
engine.ixx
)
# Flags de alerta estrito
target_compile_options(app_modulos PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/W4 /permissive->
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic>
)
2. Instruções de Compilação e Execução
# Geração de build e compilação via CMake Moderno
cmake -B build -S .
cmake --build build --config Release
# Execução do binário compilado
./build/app_modulos # Linux / macOS
.\build\Release\app_modulos.exe # Windows MSVC
3. Saída Esperada no Terminal
=== CAPÍTULO 19: MÓDULOS C++20 E CMAKE MODERNO ===
[Modulo telemetry.engine] Motor 'Alpha_Gateway' inicializado via C++20 Modules!
Total Transacoes: 1500000
Latencia Media: 1.45 microssegundos