Предположим, что мы определили функцию шаблона в исходном файле X.cpp, как показано ниже:
/............. X.cpp .........................../
template<class Container>
static inline void foo(const Container& container,std::string& content)
{
/.../
}
static
а также inline
Вот?cpp
файл, это повлияет на сокращение времени сборки для каждой единицы перевода?Получаем ли мы какую-либо оптимизацию компилятора / компоновщика, используя static и inline?
Скорее всего, не. static
квалификатор делает функцию шаблона внутренней связью. Это означает, что имя foo
будет ссылаться на него только внутри единицы перевода X.cpp
, Если это самое определение появляется в Y.cpp
, это другая функция шаблона для всех намерений и целей.
inline
Спецификатор, вероятно, является ошибочной попыткой побудить компилятор встроить вызов. Поскольку компиляторы делают это даже без спецификатора и могут даже игнорировать его, если захотят, это бессмысленно. Самое большее, что можно сказать, это то, что это проясняет намерение. Но YMMV о том, как это хорошая идея.
Если в файле cpp имеется значительное количество определений шаблонных функций, это повлияет на сокращение времени сборки для каждой единицы перевода?
Не пытайтесь выполнять за них работу компилятора / компоновщика. Укажите связь, которая имеет смысл. Поместите определение в файл header / cpp, основываясь на том же обосновании, и позвольте вашей системе сборки работать.
Если вы искусственно начнете делать шаблоны статичными и включать их в различные блоки перевода, ваш компилятор / компоновщик, скорее всего, допустит ошибку из-за осторожности и взорвет ваш исполняемый размер.
Других решений пока нет …