Re[2]: Упражнение с templates
От: orangy Россия
Дата: 25.10.02 04:48
Оценка:
Здравствуйте 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)
"Develop with pleasure!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.