Чтобы изменить Struct
на месте, используйте hana::accessors
, который предоставляет кортеж из hana::pair
с ключом и функцией доступа. Кроме того, поскольку у нас пока нет отражения, вам нужно использовать один из макросов, таких как BOOST_HANA_ADAPT_STRUCT
, чтобы реализовать A
как hana::Struct
.
Другой ответ обращается к лямбде принимает значение r, потому что сжатый кортеж является временным объектом.
#include
#include
namespace hana = boost::hana;
using namespace hana::literals;
#include
struct A
{
int integer;
std::string string;
};
BOOST_HANA_ADAPT_STRUCT(A, integer, string);
int main()
{
auto tuple = hana::make_tuple(42, "42");
A a;
hana::for_each(
hana::zip(hana::accessors(), tuple),
[&a](auto&& element) {
auto accessor_pair = hana::at_c<0>(element);
auto get_member = hana::second(accessor_pair);
get_member(a) = hana::at_c<1>(element);
});
assert(a.integer == 42 && a.string == "42");
}
Вы могли использовать предварительное утверждение:
(?!999)\d{3}
Этот пример соответствует трем цифрам кроме 999
.
, Но если у Вас, оказывается, не есть реализация регулярного выражения с этой функцией (см. Сравнение Разновидностей Регулярного выражения ), вероятно, необходимо создать регулярное выражение с основными характеристиками самостоятельно.
А совместимое регулярное выражение с базовым синтаксисом только было бы:
[0-8]\d\d|\d[0-8]\d|\d\d[0-8]
Это действительно также соответствует любым трем последовательностям цифр, которые не являются 999
.
Соответствие против шаблона и использования базовый язык для инвертирования булева результата соответствия. Это будет намного более четким и удобным в сопровождении.
Дополнение регулярного языка является также регулярным языком, но создать его необходимо создать DFA для регулярного языка и внести любое допустимое изменение состояния в ошибку. См. это для примера. То, что не говорит страница, - то, что она преобразовала /(ac|bd)/
в /(a[^c]?|b[^d]?|[^ab])/
. Преобразование из DFA назад к регулярному выражению не тривиально. Легче, если можно использовать неизменное регулярное выражение и изменить семантику в коде, как предложенный прежде.
(B)|(A)
тогда использование, что получает группа 2...