spamsink: (Default)
[personal profile] spamsink

Какого, спрашивается, рожна этот велосипед приходится постоянно изобретать?
Почему он не в стандартной библиотеке с самого начала? Что за бессмысленное чистоплюйство?
std::string format(const char * form, ...) {
    const int bufsize = 1024;
    char buf[bufsize];
    std::string ret;
    va_list al, al_copy;
    va_start (al,form);
    va_copy (al_copy, al);
    int need = vsnprintf(buf, bufsize, form, al) + 1;
    if (need <= bufsize) {
        ret = buf;
    } else {
        char dyn[need];
        vsprintf(dyn, form, al_copy);
        ret = dyn;
    }
    va_end(al_copy);
    va_end(al);
    return ret;
}

Date: 2012-08-09 05:15 am (UTC)
oryx_and_crake: (Default)
From: [personal profile] oryx_and_crake
неужели нету конструктора с параметром типа строка? не может быть.

(no subject)

From: [personal profile] oryx_and_crake - Date: 2012-08-09 05:39 am (UTC) - Expand

(no subject)

From: [personal profile] oryx_and_crake - Date: 2012-08-09 05:42 am (UTC) - Expand
(deleted comment)

Date: 2012-08-09 12:05 am (UTC)
yigal_s: (Default)
From: [personal profile] yigal_s
как можно? C++ и printf - это верх некашерности!

Полагается использовать всякие streams! Уже 20 лет как.

Date: 2012-08-09 12:23 am (UTC)
From: [identity profile] oldjackaroo.livejournal.com
"Можно это сделать старым грязным некошерным способом через тег table. Будет работать через 5 минут, но все веб-дизайнеры тебя заплюют. А можно сделать это чистым, красивым и современным способом, через css, и всего через каких-то пять часов оно заработает."

(no subject)

From: [personal profile] yigal_s - Date: 2012-08-09 12:24 am (UTC) - Expand

Date: 2012-08-15 10:00 am (UTC)
From: [identity profile] http://users.livejournal.com/_navi_/
не надо streams! Там они такого наворотили, для любых нетривиальных программ пользоваться не стоит.

(no subject)

From: [personal profile] yigal_s - Date: 2012-08-15 11:59 am (UTC) - Expand

Date: 2012-08-09 12:24 am (UTC)
From: [identity profile] oldjackaroo.livejournal.com
"Собакам и программистам не на С++ вход воспрещен"
Таким образом, предполагается, что существуют собаки, программирующие не на С++. :)

(no subject)

From: [identity profile] oldjackaroo.livejournal.com - Date: 2012-08-09 12:42 am (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] oldjackaroo.livejournal.com - Date: 2012-08-09 12:51 am (UTC) - Expand

Date: 2012-08-20 04:35 am (UTC)
From: [identity profile] e2pii1.livejournal.com
предполагается, что существуют собаки - не программисты

(no subject)

From: [identity profile] e2pii1.livejournal.com - Date: 2012-08-20 06:42 am (UTC) - Expand

(no subject)

From: [identity profile] e2pii1.livejournal.com - Date: 2012-08-20 07:37 am (UTC) - Expand

(no subject)

From: [identity profile] e2pii1.livejournal.com - Date: 2012-08-20 08:38 am (UTC) - Expand

Date: 2012-08-09 04:17 am (UTC)
stas: (Default)
From: [personal profile] stas
asprintf?

Date: 2012-08-09 05:41 am (UTC)
From: [identity profile] vaddimka.livejournal.com
Вообще, это плохая практика - не type safe, никакой проверки на этапе компиляции.

Лучше вот так http://pastebin.com/G1KhB4jz

потом можно писать что-то типа
std::string string = StringFormatter() << "Text " << 567;
фактически, такую конструкцию можно использовать в любом месте где ожидается строка, автоматически прикастуется

(no subject)

From: [identity profile] vaddimka.livejournal.com - Date: 2012-08-09 06:19 am (UTC) - Expand

(no subject)

From: [identity profile] vaddimka.livejournal.com - Date: 2012-08-09 08:14 am (UTC) - Expand

No title

Date: 2012-08-09 07:06 am (UTC)
From: [identity profile] livejournal.livejournal.com
User [livejournal.com profile] baramin referenced to your post from No title (http://baramin.livejournal.com/122195.html) saying: [...] ;  return ret; } <code> <a href="http://spamsink.livejournal.com/446926.html [...]

Date: 2012-08-09 11:24 am (UTC)
From: [identity profile] dz.livejournal.com
printf пережил си, это факт. в яве он тоже уже есть.

Date: 2012-08-09 11:37 am (UTC)
From: [identity profile] lazyreader.livejournal.com
http://www.boost.org/doc/libs/1_50_0/libs/format/

а если вам boost не стандарт, то я уж и не знаю.

(no subject)

From: [identity profile] lazyreader.livejournal.com - Date: 2012-08-10 04:20 am (UTC) - Expand

(no subject)

From: [identity profile] lazyreader.livejournal.com - Date: 2012-08-10 07:00 am (UTC) - Expand

Date: 2012-08-09 02:30 pm (UTC)
From: [identity profile] fatoff.livejournal.com
Эта полезная фича (массив переменной длины на стеке) именно в C++ большей частью до сих пор была заблокирована. Я чаще не GNU компилляторы использовал. Слышал, С99 и всё такое. За такое в кроссплатформенной разработке на код-ревью могут отправить в постель без сладкого. :-p

http://en.wikipedia.org/wiki/Variable-length_array

int need = vsnprintf(buf, bufsize, form, al) + 1;
if (need <= bufsize) {
ret = buf;
} else {
char dyn[need];
vsprintf(dyn, form, al_copy);
ret = dyn;
}

(no subject)

From: [identity profile] fatoff.livejournal.com - Date: 2012-08-09 05:11 pm (UTC) - Expand

(no subject)

From: [identity profile] fatoff.livejournal.com - Date: 2012-08-09 05:29 pm (UTC) - Expand

(no subject)

From: [identity profile] fatoff.livejournal.com - Date: 2012-08-09 05:54 pm (UTC) - Expand

Date: 2012-08-11 04:51 pm (UTC)
From: [identity profile] fatlortroll.livejournal.com
Какой-то совсем лютый велосипед нарисован. Ellipsis-функция, выделение буфера фиксированного размера в ней, printf. Чем не устраивает std::stringstream, например? Если вылезти чучуть за пределы stdlib, то boost::format, а то и прям boost::spirit::karma.

Date: 2012-08-12 04:55 pm (UTC)
From: [identity profile] fatoff.livejournal.com
И каждая вторая C++ библиотека содержит свой форматтер, да зачастую, с ошибками. В то время как потоки behind the scene занимаются безобразиями просто, в смысле эффективности.

Ещё есть itoa, которую, по причине отсутствия её определения в стандартах ANSI C и C++ порой реализуют через stream. Ужасно... Столько лет эволюции языка, и на те.

Но нормальные девелоперы просто создают себе библиотеку для своего колхоза Тупик Коммунизма, работают, а не ноют. :-)

Profile

spamsink: (Default)
spamsink

February 2026

S M T W T F S
12345 67
8 91011 121314
15161718 192021
22 2324 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 5th, 2026 06:26 am
Powered by Dreamwidth Studios