Поэлементное отображение кортежа с использованием функции шаблона ⇐ C++
-
Гость
Поэлементное отображение кортежа с использованием функции шаблона
Я использую perform_mapping по ссылке, как здесь, но получаю ошибку компиляции.
#include #include #include #include #include сведения о пространстве имен { шаблон структура return_type; шаблон struct return_type { //Я изменил строку ниже по сравнению с тем, что есть в ссылке using type = Tuple; }; template struct return_type { используя type = Array; }; шаблон используя return_type_t = имя типа return_type::type; шаблон return_type_t Perform_mapping(Tuple&& tup, Mapping&& сопоставление, std::index_sequence) { return {mapping(std::get(std::forward(tup)))...}; } } шаблон auto Perform_mapping (Кортеж&& tup, Сопоставление&& сопоставление) { детали возврата::perform_mapping(std::forward(tup), std::forward(mapping), std::make_index_sequence{}); } структура А { A(двойной z): x(z){}; двойной х; используя Тип = двойной; }; структура Б { B(std::string s): x(std::move(s)) {} станд::строка х; используя Тип = std::string; }; структура С { C() : m_tuple({A(1.0), B("A")}) { } шаблон имя_типа T::Type f(T& z) { вернуть з.х; } std::tuple get() { return Perform_mapping(m_tuple, [this](auto& z) { return this->f(z); }); } std::tuple m_tuple; }; интервал основной() { С с; авто т = c.get(); }; Мой вопрос: могу ли я реализовать perform_mapping так, как работает приведенный выше код?
Я использую perform_mapping по ссылке, как здесь, но получаю ошибку компиляции.
#include #include #include #include #include сведения о пространстве имен { шаблон структура return_type; шаблон struct return_type { //Я изменил строку ниже по сравнению с тем, что есть в ссылке using type = Tuple; }; template struct return_type { используя type = Array; }; шаблон используя return_type_t = имя типа return_type::type; шаблон return_type_t Perform_mapping(Tuple&& tup, Mapping&& сопоставление, std::index_sequence) { return {mapping(std::get(std::forward(tup)))...}; } } шаблон auto Perform_mapping (Кортеж&& tup, Сопоставление&& сопоставление) { детали возврата::perform_mapping(std::forward(tup), std::forward(mapping), std::make_index_sequence{}); } структура А { A(двойной z): x(z){}; двойной х; используя Тип = двойной; }; структура Б { B(std::string s): x(std::move(s)) {} станд::строка х; используя Тип = std::string; }; структура С { C() : m_tuple({A(1.0), B("A")}) { } шаблон имя_типа T::Type f(T& z) { вернуть з.х; } std::tuple get() { return Perform_mapping(m_tuple, [this](auto& z) { return this->f(z); }); } std::tuple m_tuple; }; интервал основной() { С с; авто т = c.get(); }; Мой вопрос: могу ли я реализовать perform_mapping так, как работает приведенный выше код?
Мобильная версия