CPP_GEEK Telegram 354
Сейчас покажу вам простой, но мощный приём для ускорения компиляции - разделение объявления и реализации шаблонов с использованием explicit instantiation.

Все мы знаем, что шаблоны в C++ реализуются в заголовочных файлах. Это значит, что каждый .cpp файл, который включает такой заголовок, заново инстанцирует шаблон. Результат - долгое время компиляции и раздутый бинарник.

🔧 Что можно сделать?

Разделяем интерфейс и реализацию:


// MyTemplate.hpp
#pragma once

template<typename T>
class MyTemplate {
public:
void doSomething();
};



// MyTemplate.cpp
#include "MyTemplate.hpp"
#include <iostream>

template<typename T>
void MyTemplate<T>::doSomething() {
std::cout << "Doing something\n";
}

// Явная инстанциация
template class MyTemplate<int>;


Теперь в клиентском коде:


#include "MyTemplate.hpp"

int main() {
MyTemplate<int> obj;
obj.doSomething();
}


Это даст:

- Сокращение времени компиляции
- Чище зависимости
- Потенциально меньший размер бинарника

Но помните: explicit instantiation работает, только если вы заранее знаете типы, с которыми будете использовать шаблон.


➡️ @cpp_geek
👍8😱2



tgoop.com/cpp_geek/354
Create:
Last Update:

Сейчас покажу вам простой, но мощный приём для ускорения компиляции - разделение объявления и реализации шаблонов с использованием explicit instantiation.

Все мы знаем, что шаблоны в C++ реализуются в заголовочных файлах. Это значит, что каждый .cpp файл, который включает такой заголовок, заново инстанцирует шаблон. Результат - долгое время компиляции и раздутый бинарник.

🔧 Что можно сделать?

Разделяем интерфейс и реализацию:


// MyTemplate.hpp
#pragma once

template<typename T>
class MyTemplate {
public:
void doSomething();
};



// MyTemplate.cpp
#include "MyTemplate.hpp"
#include <iostream>

template<typename T>
void MyTemplate<T>::doSomething() {
std::cout << "Doing something\n";
}

// Явная инстанциация
template class MyTemplate<int>;


Теперь в клиентском коде:


#include "MyTemplate.hpp"

int main() {
MyTemplate<int> obj;
obj.doSomething();
}


Это даст:

- Сокращение времени компиляции
- Чище зависимости
- Потенциально меньший размер бинарника

Но помните: explicit instantiation работает, только если вы заранее знаете типы, с которыми будете использовать шаблон.


➡️ @cpp_geek

BY C++ geek


Share with your friend now:
tgoop.com/cpp_geek/354

View MORE
Open in Telegram


Telegram News

Date: |

Over 33,000 people sent out over 1,000 doxxing messages in the group. Although the administrators tried to delete all of the messages, the posting speed was far too much for them to keep up. Concise Telegram desktop app: In the upper left corner, click the Menu icon (the one with three lines). Select “New Channel” from the drop-down menu. To delete a channel with over 1,000 subscribers, you need to contact user support Add the logo from your device. Adjust the visible area of your image. Congratulations! Now your Telegram channel has a face Click “Save”.!
from us


Telegram C++ geek
FROM American