Необходимо пройти по всему кортежу и выводить результат каждого прохода. В итоге работы программы на экран должны быть выведены все элементы кортежа. Вот так я пытаюсь делать:
#include <iostream>
#include <tuple>
using namespace std;
int main()
{
tuple<int, char, double> some(32, 10, 33.5); //10 это перенос строки, чтобы числа не сливались.
for (int i=0;i<2;i++){
cout << get<i>(some);
}
return 0;
}
Но получаю ошибку:
no matching function for call to 'get'
Неужели область видимости виновата? Как еще можно реализовать цикл с элементами кортежа?
вывод который ожидаю
32
33.5
Простой цикл не работает так как параметр для функции std::get
должен быть константой времени компиляции. В С++17 с использованием generic lambda, fold expression и оператора запятой можно сделать так:
#include <iostream>
#include <tuple>
int main()
{
::std::tuple<int, char, double> some{32, 'w', 33.5};
::std::apply([](auto &... x){(..., static_cast<void>(::std::cout << x << ::std::endl));}, some);
return 0;
}
Решение без использования fold expression.
#include <iostream>
#include <tuple>
template <size_t First, size_t Last>
struct tuple_index
{
};
template <size_t Last,
typename Func,
typename... Types>
void for_n_tuple(Func&& func, const std::tuple<Types...>& tuple, tuple_index<Last, Last>)
{
func(std::get<Last>(tuple));
}
template <size_t First, size_t Last,
typename Func,
typename... Types>
void for_n_tuple(Func&& func, const std::tuple<Types...>& tuple, tuple_index<First, Last>)
{
func(std::get<First>(tuple));
for_n_tuple(std::forward<Func>(func), tuple, tuple_index<First + 1, Last>{});
}
template <size_t First, size_t Last,
typename Func,
typename... Types>
void for_tuple(Func&& func, const std::tuple<Types...>& tuple)
{
for_n_tuple(std::forward<Func>(func), tuple, tuple_index<First, Last>{});
}
int main()
{
auto tuple = std::make_tuple(12, "hello", 13);
for_tuple<0, 1>([](auto&& item) {
std::cout << item << "\n";
}, tuple);
}
C++14. https://wandbox.org/permlink/8Fpx3o4PeG1NuUcX
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Ошибка Severity Code Description Project File Line Suppression State Error C4700 uninitialized local variable 'tmp_double_vector' used isdt Isodatacpp 186
Пишу самописный модуль для ведения журнала работы программыДля упрощения последующего анализа логов хочу сделать разбивку сообщений по группам/модулям,...
Нужно поменять местами последний и предпоследний символы QStringРешил делать через std::swap():