Re[6]: string 2 int (Между скоростью и красотой)
От: Programador  
Дата: 07.08.07 08:32
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Programador, Вы писали:


A>>>Ага, я кое-что подкрутил, лежит в HEAD.

A>>>Вот http://accu.org/index.php/journals/1375 подробно объясняется.
P>>

P>>

P>>struct itoa_result
P>>{
P>>    char elems[12]; // assume 32-bit int
P>>};
P>>itoa_result itoa(int n);
P>>

P>> A typical call of this function would look like this:

P>>s += itoa(n).elems;


RO>А почему не boost::array? Да и assume можно было бы выразить и более уверенно, в виде BOOST_STATIC_ASSERT, или автоматически выбирать размер. Или это только пример из журнала, а внутри иначе?

Именно boost::array возврашается boost::array::elems используется


P>>да так като поудобней будет, без bost::::::::elems

P>>
P>>struct S12{ char s[12];};
P>>char * itoa_result(int v,char *r=S12().s)
P>>{ ....................
P>>  return r;
P>>}
P>>


RO>Ты с дубу рухнул? S12() окончит свое существование очень быстро, в любом случае раньше, чем юзер успеет использовать результат.

Да такоеже время жизни как и у возвращенного boost::array до первой; покороче чем у внутреннего статического буфера, зато так можно
#include <stdio.h>
template<int N> struct ShortLine {char str[N];};

char *val2str(int v,char *f="%d",char *b=ShortLine<20>().str)
   {  sprintf(b,f,v);
      return b;
   }

void main(int, char ** )
{  char buf[64];
   printf(" %s %s %s\n",val2str(1),val2str(2),val2str(3,"pe4ataem %d",buf));
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.