simstr 1.0
Yet another strings library
 
Загрузка...
Поиск...
Не найдено
Шаблон структуры simstr::expr_choice_one_lit< A, N, Compare >

Строковое выражение условного выбора Подробнее...

#include <strexpr.h>

Подробное описание

template<StrExpr A, size_t N, bool Compare>
struct simstr::expr_choice_one_lit< A, N, Compare >

Строковое выражение условного выбора

Параметры шаблона
AТип ветки для true

Выражение, в зависимости от истинности условия генерирующее либо выражение A, либо строку из строкового литерала. Напрямую тип обычно не используется, создаётся через e_choice()

Так как строковые литералы не являются строковыми выражениями, то использовать их в виде одиночного выражения в частях e_choice или e_if требовало бы их обрамления какими-либо конструкциями, преобразующими их в строковое выражение. Приходилось бы писать например так:

e_choice(condition, text, e_t("empty"));
e_choice(condition, text, eea + "empty");
e_choice(condition, text, "empty"_ss);
e_if(!condition, "empty"_ss);
constexpr auto e_t(T &&s)
Преобразует строковый литерал в строковое выражение.
Определения strexpr.h:477
constexpr auto e_choice(bool c, const A &a, const B &b)
Создание условного строкового выражения expr_choice.
Определения strexpr.h:776
constexpr auto e_if(bool c, const A &a)
Создание условного строкового выражения expr_if.
Определения strexpr.h:838
constexpr empty_expr< u8s > eea
Пустое строковое выражение типа char.
Определения strexpr.h:379

Это, с одной стороны - захламляет код, с другой - делает его менее оптимальным. Поэтому для таких случаев сделаны перегрузки e_choice и e_if для случаев, когда их параметрами являются строковые литералы. В этих перегрузках и используются expr_choice_one_lit и expr_choice_two_lit, позволяя писать так:

e_choice(condition, text, "empty");
e_choice(condition, "false", "true");
e_if(!condition, "empty");

Объявления и описания членов структуры находятся в файле: