Можно ли эмулировать std:: is invocable в C++11?

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

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

спасибо

1 ответов


вы можете попробовать эту реализацию:) взяты из библиотек 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>
    >
{
};