J'ai deux tuples, l'un contenant des valeurs et l'autre contenant des actions pour ces valeurs. Maintenant, je veux appliquer l'action correspondante à chaque valeur, avec le moins de "surcharge" de code possible. Quelque chose comme l'exemple simplifié ci-dessous.
#include <iostream>
#include <boost/hana.hpp>
namespace hana = boost::hana;
using namespace hana::literals;
struct ThinkPositive
{
void operator()(int &val) const
{
std::cout << "Think positive!\n";
val = std::abs(val);
}
};
struct Nice
{
void operator()(int &val) const
{
std::cout << val << " is nice!\n";
}
};
void numbers()
{
auto handlers = hana::make_tuple(Nice{}, ThinkPositive{});
auto nums = hana::make_tuple(5, -12);
auto handlers_and_nums = hana::zip(handlers, nums);
hana::for_each(handlers_and_nums, [](auto &handler_num) {
handler_num[0_c](handler_num[1_c]);
});
auto result = hana::transform(handlers_and_nums, [](const auto &handler_num) {
return handler_num[1_c];
});
hana::for_each(result, [](const auto num) {
std::cout << "got " << num << '\n';
});
}
int main()
{
numbers();
}
Bien que l'exemple ci-dessus fonctionne, il serait plus agréable de modifier le contenu de nums en place.
Existe-t-il un moyen de modifier les chiffres en place ?