При использовании С++-модулей есть ли какая-либо причина отделять объявления функций (файлы .hpp) от их определений (файлы .cpp)?

Я привык писать код без модулей, где заголовочные файлы содержат объявления функций вроде:

// foo.h 
class Foo
{
    void bar();
};

а соответствующий .cpp файл содержит определение:

// foo.cpp
#include "foo.h"

void Foo::bar()
{
    // ...
}

Насколько мне известно, это делается для уменьшения времени компиляции и сокращения зависимостей. Если modules будет использоваться, будет ли это применяться? Было бы так же быстро иметь класс в одном файле с определениями, как это делают Java и С#? Если это так, возникнет ли необходимость в файлах .hpp и .cpp при использовании модулей?

Ответ 1

Здесь есть приятная дискуссия которая объясняет идею модулей.

Короче говоря, вы правы, разделение между заголовочными файлами и файлами реализации больше не понадобится. Директива #include будет заменена директивой import, и во время компиляции модуль предоставит необходимую информацию, которая в противном случае была бы включена в заголовочный файл.