При использовании С++-модулей есть ли какая-либо причина отделять объявления функций (файлы .hpp) от их определений (файлы .cpp)?
Я привык писать код без модулей, где заголовочные файлы содержат объявления функций вроде:
// foo.h
class Foo
{
void bar();
};
а соответствующий .cpp файл содержит определение:
// foo.cpp
#include "foo.h"
void Foo::bar()
{
// ...
}
Насколько мне известно, это делается для уменьшения времени компиляции и сокращения зависимостей. Если modules будет использоваться, будет ли это применяться? Было бы так же быстро иметь класс в одном файле с определениями, как это делают Java и С#? Если это так, возникнет ли необходимость в файлах .hpp
и .cpp
при использовании модулей?
Ответы
Ответ 1
Здесь есть приятная дискуссия которая объясняет идею модулей.
Короче говоря, вы правы, разделение между заголовочными файлами и файлами реализации больше не понадобится. Директива #include
будет заменена директивой import
, и во время компиляции модуль предоставит необходимую информацию, которая в противном случае была бы включена в заголовочный файл.