Меня интересует размер кода шаблона кода.
Пожалуйста, рассмотрите следующий код
template<typename T>
class vector
{
public:
vector(size_t size) :
{
array = NEW T[size];
}uint32_t push_back(T value)
{
... adding value to array and possible array realloction..
}
private:
T * array;
}
Когда у меня есть два векторных экземпляра,
vector<float> v1;
vector<int> v2;
будет ли он скомпилирован в двоичный файл с двумя push_back
реализации
push_back(float)
push_back(int)
или только один или что-то еще?
Можно ли уменьшить размер кода с помощью шаблонов вместо отдельных классов для float
а также int
?
Классы и функции, созданные из шаблонов, не имеют никакого отношения между ними во время выполнения, и, таким образом, функции будут дублироваться.
Некоторые компиляторы оптимизируют удаленный / дублированный код, но область этой оптимизации шире, чем экземпляры шаблонов.
Обратите внимание, что даже если код выглядит одинаково, он может вызывать различные вызовы функций при использовании определенных операторов.
Это особенно заметно для контейнеров с указателями, таких как std::vector<int*>
а также std::vector<char*>
, вы получите разные функции для обоих, хотя их поведение практически идентично.
Подводя итог, можно сказать, что шаблоны отлично подходят для уменьшения размера кода, но создание множества различных экземпляров приведет к увеличению размера вашего двоичного файла.
Других решений пока нет …