Перейти к основному содержимому

Разделение кода

Пусть есть три файла main.cpp, lib.hpp, lib.cpp.

project/
├─ lib.hpp
├─ lib.cpp
└─ main.cpp

В заголовочном файле описываются сигнатуры функций и методов, определяются алиасы типов, пишутся doc-комментарии. Реализация, за исключением inline выносится в файл реализации.

lib.hpp
#ifndef PROJECT_LIB_HPP_
#define PROJECT_LIB_HPP_

#include <std_module>

using LibType = std::some_container<int>;

/** Doc comment */
void libFunction(const int a, int b = 0);

/** Doc comment */
class LibClass {
public:
/** Doc comment */
auto libMethod(LibType& value) -> Type;
}

#endif // PROJECT_LIB_HPP_

В файле реализации даётся определение вынесенным функциям и методам:

lib.cpp
#include "lib.hpp"


void libFunction(const int a, int b) {
// implementation
}

auto LibClass::libMethod(LibType& value) -> Type {
// implementation
}

Подключение заголовка:

main.cpp
#include "lib.hpp"


int main() {
// available: LibType, LibClass, libFunction
}