Я пытаюсь перебрать std :: tuple и получить истинное количество места (байтов), которое он занимает. Для обработки std :: string мне нужно использовать функцию .length (), но я не могу скомпилировать, и я получаю ...

1
t348575 28 Дек 2020 в 15:41

1 ответ

Лучший ответ

Что-то вроде этого, возможно:

template <typename T>
size_t LengthOf(const T&) { return sizeof(T); }

template <typename ... Params>
size_t LengthOf(const std::basic_string<Params...>& s) { return s.length(); }

template <typename Tup>
size_t iterate_tuple_types(const Tup& t) {
  auto sum_length = [](const auto&... args) {
      return (LengthOf(args) + ...);
  };
  return std::apply(sum_length, t);
}

Демо

1
Igor Tandetnik 29 Дек 2020 в 05:17