Здравствуйте c-smile, Вы писали:
CS>Здравствуйте orangy, это было круто!
CS>Но смею предложить свой вариант:
Позвольте позанудствовать в ответ
CS>CS>int main()
CS>{
CS> unsigned int uival = atoui("123");
CS> int ival = atoi("-2123");
CS> long lval = atol(" -2123");
CS>}
CS>
Во-первых atoui в стандарте нет. atol и atoi есть, согласно С.2, однако согласно стандарту С они "subsumed by" strtol. В этой группе также есть strtoul.
Во-вторых, ваше предложение не будет работать с итераторами (например istream_iterator) и std::string, что не есть удобно...
В-третьих, см.subject — это упражнение на шаблоны, специализацию, обход отсутствия частичной специализации и т.п. Думаю, не мне одному будет полезно
В-четвертых, шаблонная реализация позволяет правильно и типобезопасно обрабатывать некоторые интересные (и важные) случаи:
template<class T>
class my_number
{
T val;
public:
... всё что нужно для счастья ...
template<class It>
my_number<T> &operator=(const It&) { val = parse_cast<T>(It); }
};
std:vector<my_number<unsigned int> > v(10);
v[0] = "123";
v[1] = istream_iterator(f);
CS>//it might be not so aesthetic but human readable though...
В D&N папа Страуструп пишет, что любая явная конверсия (а это именно она) является потенциальной проблемой и должна быть явно заметна. Это одна из причин появления синтаксиса dynamic_cast, другая — синтаксическая схожесть с шаблонными функциями. Поэтому я и выбрал аналогичный синтаксис.
Конечно, в предложенном мной варианте множество проблем, однако как стартовая точка — пойдёт

RSDN@Home 1.0 alpha 12 (tester's build)