В компьютерных науках есть 2 трудные проблемы: аннулирование кэша, присвоение имен вещам и отдельные ошибки.
Это вторая проблема: присвоение имен вещам.
Яглядя, если этот метод или тип уже использовался где-то еще и имеет имя.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
?Я ищу имя, которое хорошо известно в любом сообществе (даже не на языке C ++), даже глагол, который описывает «принятие значения времени выполнения и создание переключателя и набора значений времени компиляции в сгенерированном коде для выбора между"лучше, чем предложение.
Живой пример
Хороший ответ будет включать имя, цитаты / цитаты, описывающие, что означает это имя, примеры использования названной вещив другом контексте, и свидетельство того, что это имя эквивалентно или включает в себя вышеупомянутый тип / значение и функцию.
(Это может помочь найти имя, обобщение которого было бы enum
вместоbool
, который имеет фиксированное число известных состояний, и карту переключения / случая, которая преобразует значение времени выполнения в константу времени компиляции в каждом предложении case.)