Какие преимущества дает определение функции шаблона со статическим и встроенным в исходном файле (cpp)?

Предположим, что мы определили функцию шаблона в исходном файле X.cpp, как показано ниже:

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

1

Решение

Получаем ли мы какую-либо оптимизацию компилятора / компоновщика, используя static и inline?

Скорее всего, не. static квалификатор делает функцию шаблона внутренней связью. Это означает, что имя foo будет ссылаться на него только внутри единицы перевода X.cpp, Если это самое определение появляется в Y.cpp, это другая функция шаблона для всех намерений и целей.

inline Спецификатор, вероятно, является ошибочной попыткой побудить компилятор встроить вызов. Поскольку компиляторы делают это даже без спецификатора и могут даже игнорировать его, если захотят, это бессмысленно. Самое большее, что можно сказать, это то, что это проясняет намерение. Но YMMV о том, как это хорошая идея.

Если в файле cpp имеется значительное количество определений шаблонных функций, это повлияет на сокращение времени сборки для каждой единицы перевода?

Не пытайтесь выполнять за них работу компилятора / компоновщика. Укажите связь, которая имеет смысл. Поместите определение в файл header / cpp, основываясь на том же обосновании, и позвольте вашей системе сборки работать.

Если вы искусственно начнете делать шаблоны статичными и включать их в различные блоки перевода, ваш компилятор / компоновщик, скорее всего, допустит ошибку из-за осторожности и взорвет ваш исполняемый размер.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector