Простое создание(форматирование) строк

dix75
dix75

Рассмотрим пример (создание простого html):

inline std::string print() noexcept {
    std::stringstream s;
    s << "<html>";
    for(auto i : {"h", "h1", "h2", "h3"})
        s << "\t<" << i << " name=\"" << i << "\">" << i << "</" << i <<">\n";  
    s << "</html>";
    return s.str();
}

Выглядит избыточно, даже сырые строки не сильно улучшают ситуацию.

Мое предложение взять за основу С#, python форматирование и адаптировать для строк. Комитет трепетно относится к строкам и что-то реально добавить к строкам будет весьма затруднительно.

Поэтому наиболее приемлемым вариантом будет  использование конструкции на подобие (user defined literals).
Пример:

inline std::string print() noexcept {
    std::string s("<html>");
    for(auto i : {"h", "h1", "h2", "h3"})
         s+= ($"\t{i} name="{i}">{i}</{i}>\n".format(i)); 
    s +="</html>";
    return s;
}

Более того, простые варианты вполне могут быть и constexpr и скорее всего, здесь будет возможна оптимизация.

Возможны и другие варианты.

-2
рейтинг
3 комментария
Михаил Мальцев
Михаил Мальцев
dix75
Михаил Мальцев,
Да похоже, но не совсем то,
В c# 6 дополнительно поддерживается дополнительное форматирование
пример:
$"\t'{file.name}' encrypted";
dix75
yndx-antoshkka
А у вас есть рабочий прототип предложения?
yndx-antoshkka
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).