Ветка при компиляции в 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".