Получение подстроки в constexpr-функции
Как написать constexpr-функцию, которая из строки возвращает произвольную подстроку?
Пусть, для упрощения, нужно получить первые 3 символа
constexpr char * get_first_chars(const char * str, inc count) {
.......
}
const char * get_first_chars("abcdef", 3);
Последние символы вернуть без проблем. А первые? Вставить в строку \0 нельзя
Можно заменить char* на std::string, но std::string не разрешается использовать в constexpr-функциях
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Озвученную проблему [string_view] решает, но мне бы еще конкатенацию
Это делается примерно вот так:
constexpr std::size_t size = [&]{
std::size_t size = 0;
// Тут считаете size. Лямбда не обязательна, если можете без нее - убирайте.
return size;
}();
constexpr std::array<char, size> str = []{
std::array<char, size> str{};
// Тут руками собираете строку в `str`.
return str;
}();