В компьютерных науках есть две серьезные проблемы: аннулирование кэша, присвоение имен и ошибки типа "один на один".
Это о второй проблеме: называть вещи.
Я смотрю, если этот метод или тип уже использовался где-то еще и имеет имя. dichotomy
- нормальное имя, но bools_at_compile_time
- ужасное.
using dichotomy_t = std::variant<std::false_type, std::true_type>;
// (or a struct that inherits from that, and overloads operator bool())
constexpr dichotomy_t dichotomy( bool b ) {
if (b) return std::true_type{};
return std::false_type{};
}
template<class F, class...Bools>
constexpr auto bools_at_compile_time( F&& f, Bools...bools ) {
static_assert( (std::is_same<Bools, bool>{} && ...) );
return std::visit( std::forward<F>(f), dichotomy(bools)... );
}
dichotomy_t
- это вариант между истиной и ложью. Его представление во время выполнения 0
или 1
.
Это позволяет:
auto foo( bool x, bool y ) { // <-- x and y are run-time bools here
auto func = [&](auto x, auto y) {
return some_template<x,y>(); // <-- x and y are compile-time bools here
};
return bools_at_compile_time( func, x, y ); // <-- converts runtime to compile time bools
}
Есть ли название для dichotomy_t
или более общей техники bools_at_compile_time
? Я ищу имя, которое хорошо известно в любом сообществе (даже не на языке С++), даже глагол, который описывает "принятие значения времени выполнения и создание переключателя и набора значений времени компиляции в сгенерированном коде для выбора между "лучше, чем предложение.
Хороший ответ будет включать имя, цитаты/цитаты, описывающие, что означает это имя, примеры этой именованной вещи, используемой в другом контексте, и свидетельство того, что это имя эквивалентно или включает вышеуказанный тип/значение и функцию.
(Это может помочь найти имя, обобщение которого было бы enum
вместо bool
, который имеет фиксированное число известных состояний, и картой switch/case, которая в каждом случае преобразует значение времени выполнения в константу времени компиляции пункт.)