Хочу анафорический if, который бы делал коньюнкция между операндами и возвращал первый сфейлившийся, плюс который бы анафорично захватывал все значения из операндов
Вот, например:
bool result =
a_if_and<boost::variant<T>, boost::none> (
{msg.getString(v[1]), msg.getString(v[2]), msg.getString(v[3]), msg.getString(v[4])},
// at least one operand == boost::none
[&](unisgned int first_null, const std::tuple<boost::variant<T>, boost::variant<T>, ...> &evalValues) {
std::cerr << "value " << first_null "is bad" << std::endl;
return false;
},
// otherwise
[&](const std::tuple<boost::variant<T>, boost::variant<T>, ...> &evalValues) {
std::cout << "value 0 =" << evalValues.get(0).get<T> << std::endl;
std::cout << "value 1 =" << evalValues.get(1).get<T> << std::endl;
// ...
return true;
});
То есть, a_if_end eval-ит аргументы и каждый на неравенство boost::none.
И в зависимости от этого дергает мою лямбдочку.
Что есть чо похожее? Или я слишком охуел?