LINUX.ORG.RU

с++: проверка наличия метода у типа.

 ,


0

3

Со времен С++11 есть возможность через SFINAE проверить наличие метода у типа. Но эта проверка громоздка и плохочитаема.

Вопрос появилось ли что либо новое с появлением новых стандартов, в том числе С++20? Или может кто знает, есть ли возможность прежние варианты упаковать в более лаконичный вид, используя вспомогательные классы которые запихнуть подальше в утилитные, оставив на виду только

HasMethod(T, myMethod, Res, Args...)::exists
?

Моя текущая версия проверки выглядит так, в отличие от упоминаемых в инете, она корректна для случаев если тестируемый класс является простым типом.

template<class T>
struct TestHasPack {

    template <class U>
    static void check_args( void(U::*)(Packer&) const );

    template <class U>
    static int detect(...);

    template <class U> static typename
    std::enable_if<
    std::is_same<
    decltype(check_args<U>(&U::pack)),void
    >::value>::type
    detect(T*);

    static constexpr bool exists =
    std::is_same<void,decltype(detect<T>((T*)nullptr))>::value;
};

Ответ на: комментарий от anonymous

Там про с++20 написано чуть пониже, я до туда не дочитал. Пошел разбираться в concept & requires и прочем.

victor79
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.