Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpCxIc 409 of 696 menu
◀ ▶

Ветка при компиляции в C++

Ветка при компиляции задается конструкцией if constexpr внутри шаблона: компилятор оставляет только ту часть, которая подходит типу аргумента.

Невыбранные ветки не попадают в итоговый код для конкретного типа. Запишем функцию, которая для целого печатает само число, а для строки - ее длину:

#include <iostream> #include <string> #include <type_traits> template<typename T> void show_value(const T& value) { if constexpr (std::is_integral_v<T>) { std::cout << value << "\n"; } else { std::cout << value.size() << "\n"; } } int main() { show_value(42); show_value(std::string{"hi"}); return 0; }

Напишите шаблон void report(const T& v) с if constexpr: для целого выводите удвоенное значение, для std::string - первый символ. Вызовите функцию для 3 и для строки "ab".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить