Проблема в том, что у меня есть функция, которая принимает аргумент с переменным числом аргументов. Я хочу использовать это для печати fmt. Я пытаюсь добиться этого, присоединившись к ним.
У меня есть функция присоединения:
template
inline auto join(const RANGE& range, std::string_view sep, Projection&& proj = std::identity{}) {
auto joined = range
| std::views::transform([&proj](const auto& element) { return std::invoke(proj, element); })
| std::views::join_with(sep);
return std::ranges::to(joined);
}
пока игнорируйте std::invoke, поскольку он просто выводит идентификатор, т.е. std::format("{}");
Если я предоставляю вектор, он работает нормально, однако, если у меня есть вариативная функция, например:
template
foo(Args... args) {
std::string goo = std::format(
"Show me the keys: {}",
join(args..., ",")
);
}
Это не работает. Я также пытался с помощью std::forward_as_tuple привести мои аргументы к std::tuple, однако это не помогло, поскольку операнд | не поддерживается std: :tuple.
У меня есть пример, показывающий случай с std::vector и std::tuple (в сочетании с вариационным аргументы)
Весь пример вставлен ниже:
#include
#include
#include
#include
#include
#include
template
inline auto join(const RANGE& range, std::string_view sep, Projection&& proj = std::identity{}) {
auto joined = range
| std::views::transform([&proj](const auto& element) { return std::invoke(proj, element); })
| std::views::join_with(sep);
return std::ranges::to(joined);
}
template
auto get(KEYS... keys) {
return std::forward_as_tuple(std::forward(keys)...);
}
int main() {
auto tuple_range = get("bla", "blas", "blaaaass");
auto vv = std::vector{"bla", "blas", "blaass"};
std::string goo = std::format(
"Show me the keys: {}",
join(vv, ",")
);
std::cout
Подробнее здесь: https://stackoverflow.com/questions/779 ... ith-ranges
Как мы можем использовать std::tuple вместе с диапазонами ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1728585375
Anonymous
Проблема в том, что у меня есть функция, которая принимает аргумент с переменным числом аргументов. Я хочу использовать это для печати fmt. Я пытаюсь добиться этого, присоединившись к ним.
У меня есть функция присоединения:
template
inline auto join(const RANGE& range, std::string_view sep, Projection&& proj = std::identity{}) {
auto joined = range
| std::views::transform([&proj](const auto& element) { return std::invoke(proj, element); })
| std::views::join_with(sep);
return std::ranges::to(joined);
}
пока игнорируйте std::invoke, поскольку он просто выводит идентификатор, т.е. std::format("{}");
Если я предоставляю вектор, он работает нормально, однако, если у меня есть вариативная функция, например:
template
foo(Args... args) {
std::string goo = std::format(
"Show me the keys: {}",
join(args..., ",")
);
}
Это не работает. Я также пытался с помощью std::forward_as_tuple привести мои аргументы к std::tuple, однако это не помогло, поскольку операнд | не поддерживается std: :tuple.
У меня есть пример, показывающий случай с std::vector и std::tuple (в сочетании с вариационным аргументы)
Весь пример вставлен ниже:
#include
#include
#include
#include
#include
#include
template
inline auto join(const RANGE& range, std::string_view sep, Projection&& proj = std::identity{}) {
auto joined = range
| std::views::transform([&proj](const auto& element) { return std::invoke(proj, element); })
| std::views::join_with(sep);
return std::ranges::to(joined);
}
template
auto get(KEYS... keys) {
return std::forward_as_tuple(std::forward(keys)...);
}
int main() {
auto tuple_range = get("bla", "blas", "blaaaass");
auto vv = std::vector{"bla", "blas", "blaass"};
std::string goo = std::format(
"Show me the keys: {}",
join(vv, ",")
);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/77937533/how-can-we-use-stdtuple-in-conjunction-with-ranges[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия