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

Отбрасывание ветки в C++

Отбрасывание ветки - свойство if constexpr: код в невыбранной ветке не проверяют и не включают в программу для данного типа.

Поэтому в одной ветке можно обращаться к методам, которых нет у другого типа. Запишем шаблон для целого и строки, где альтернативная ветка читает size:

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

Для int компилятор отбрасывает ветку с size, поэтому программа остается корректной, хотя у целого нет такого метода.

Объявите шаблон void emit(const T& x): для целого выводите x, иначе - x.front. Вызовите шаблон только с int 4.

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