Можно ли эмулировать std :: is_invocable в C ++ 11? - PullRequest
0 голосов
/ 05 июля 2018

Я бы хотел использовать std :: is_invocable, однако мы используем стандарт c ++ 11, тогда как is_invocable доступен только с c ++ 17.

Есть ли способ эмулировать функциональность с помощью c ++ 11?

Спасибо

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете попробовать эту реализацию :) Взято из boost C ++ библиотек. Я протестировал его с VS2017 со стандартным C ++ 14.

template <typename F, typename... Args>
struct is_invocable :
    std::is_constructible<
        std::function<void(Args ...)>,
        std::reference_wrapper<typename std::remove_reference<F>::type>
    >
{
};

template <typename R, typename F, typename... Args>
struct is_invocable_r :
    std::is_constructible<
        std::function<R(Args ...)>,
        std::reference_wrapper<typename std::remove_reference<F>::type>
    >
{
};
...