Здравствуйте, 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));
}