Size: a a a

2020 October 16

SV

Stepa Vixodnoy in pro.cxx
Кто поможет помочь с лёгкой задачей новичку?
источник

SV

Stepa Vixodnoy in pro.cxx
Спасибо
источник

A

Alex in pro.cxx
Александр Караев
Принимай string_view
Принять не могу, string_view не может быть NTTP параметром, но была идея сконструировать string_view и спросить у него длину, прокатит?
template <const char* str>
struct S {
  constexpr size_t strlen() noexcept {
     return std::string_view(str).length();
  }
};
источник

AF

Aidar Fattakhov in pro.cxx
Stepa Vixodnoy
Кто поможет помочь с лёгкой задачей новичку?
источник

АК

Александр Караев... in pro.cxx
Alex
Принять не могу, string_view не может быть NTTP параметром, но была идея сконструировать string_view и спросить у него длину, прокатит?
template <const char* str>
struct S {
  constexpr size_t strlen() noexcept {
     return std::string_view(str).length();
  }
};
какой стандарт?
по идее, код валидный (вопрос лишь в том, как ты передаёшь const char* в него
источник

DP

Denis Paukaev in pro.cxx
Alex
Принять не могу, string_view не может быть NTTP параметром, но была идея сконструировать string_view и спросить у него длину, прокатит?
template <const char* str>
struct S {
  constexpr size_t strlen() noexcept {
     return std::string_view(str).length();
  }
};
Почему не просто constexpr функция ?
источник

A

Alex in pro.cxx
Стандарт С++2a, но я не уверен, что в нужных мне компиляторах уже реализована расширенная поддержка nttp параметров, поэтому как бы С++17 для верности
источник

A

Alex in pro.cxx
Denis Paukaev
Почему не просто constexpr функция ?
потому что это упрощённый пример) Хочу завернуть строковый литерал в класс.
источник

CD

Constantine Drozdov in pro.cxx
Там написано, что в packaged task можно перемещать, так что function правда нельзя использовать при его реализации
источник

AD

Apache DOG™ in pro.cxx
Vlad Faust
> Кандидат в мастера спорта по C++
это какой рейтинг на Codeforces?
источник

AF

Aidar Fattakhov in pro.cxx
Alex
Принять не могу, string_view не может быть NTTP параметром, но была идея сконструировать string_view и спросить у него длину, прокатит?
template <const char* str>
struct S {
  constexpr size_t strlen() noexcept {
     return std::string_view(str).length();
  }
};
прокатит, только там условия на дьюрейш у указателя
источник

АК

Александр Караев... in pro.cxx
Alex
Принять не могу, string_view не может быть NTTP параметром, но была идея сконструировать string_view и спросить у него длину, прокатит?
template <const char* str>
struct S {
  constexpr size_t strlen() noexcept {
     return std::string_view(str).length();
  }
};
да на самом деле ты можешь просто constexpr my_strlen написать, если уж совсем всё плохо
источник

АК

Александр Караев... in pro.cxx
хотя вариант со string_view на С++17 должен замечательно работать
источник

A

Alex in pro.cxx
Спасибо. Если я правильно понял, о чём речь, то инстанциация и не компилится, если указатель компилятору не нравится
источник

AF

Aidar Fattakhov in pro.cxx
Alex
Спасибо. Если я правильно понял, о чём речь, то инстанциация и не компилится, если указатель компилятору не нравится
типа того
источник

AF

Aidar Fattakhov in pro.cxx
не компилится S<>
источник

A

Alex in pro.cxx
Кстати, вот один нюанс, который я не понял:

static constexpr const char str[] = "abc";
S<str>{}; // Компилится

static constexpr const char* str = "abc";
S<str>{}; // Не компилится

Почему так?
источник

AF

Aidar Fattakhov in pro.cxx
магия
источник

АК

Александр Караев... in pro.cxx
Alex
Кстати, вот один нюанс, который я не понял:

static constexpr const char str[] = "abc";
S<str>{}; // Компилится

static constexpr const char* str = "abc";
S<str>{}; // Не компилится

Почему так?
на вопрос не отвечу, но могу точно сказать, что чистым 17-м стандартом ты никак не сделаешь запись S<"123">
источник

DP

Denis Paukaev in pro.cxx
Alex
Кстати, вот один нюанс, который я не понял:

static constexpr const char str[] = "abc";
S<str>{}; // Компилится

static constexpr const char* str = "abc";
S<str>{}; // Не компилится

Почему так?
всё ещё не понятно, зачем через шаблон это пытаться протащить, а не через параметр конструктора
источник