safe_cast keyword

dix75
dix75

В случае успешного выполнения операция safe_cast возвращает указанное выражение как указанный тип; в противном случае вызывается исключение std::bad_cast.

    try {
        B b;
        auto a = safe_cast<A*>(&b);
    }
    catch(std::bad_cast const& e) {
        std::cout << e.what() << std::endl;
    }

p.s. В случаи невозможности кастования ссылок для dynamic_cast вызывается исключения std::bad_cast, хотелось бы расширить и на указатели.

-7
рейтинг
6 комментариев
yndx-antoshkka
Вы имеете в виду нечто наподобие polymorphic_cast boost.org/doc/libs/1_63_0/libs/conversion/cast.htm ?
yndx-antoshkka
dix75
yndx-antoshkka,
Возможно, но отталкивался от safe_cast от С++/CLI
dix75
yndx-antoshkka
Если делать не как конструкцию языка, а как функцию в STL - проблем быть не должно.

Ваши дальнейшие шаги:
* описать идею на английском на groups.google.com/a/isocpp.org/forum/?fromgroups#!forum/std-proposals и дождаться отзывов
* написать пропозал

При возникновении любых вопросов - обращайтесь, помогу. Если понадобится помощь с английским, с тем как начать писать proposal или с описанием идеи на std-proposals - тоже обращайтесь.
yndx-antoshkka
mrgordonfreman
Я за, но только если реализовать не в виде конструкции языка, а где-нибудь в STL (немного шаблонной магии + dynamic_cast)
mrgordonfreman
dmitriy@izvolov.ru
В общем-то, проблема решается правильной расстановкой звёздочек и апмерсандов при динамик_касте.
dmitriy@izvolov.ru
dix75
dmitriy@izvolov.ru,
Да, это правда. и в случае приведения к ссылке можно получить исключение.
dix75
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).