可以在C ++ 11中模拟std :: is_invocable吗?

时间:2018-07-05 09:36:05

标签: c++ c++11 c++17

我想使用std :: is_invocable,但是我们使用的是c ++ 11标准,而is_invocable仅在c ++ 17中可用。

有什么方法可以使用c ++ 11来仿真功能?

谢谢

1 个答案:

答案 0 :(得分:11)

您可以尝试此实现:)来自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>
    >
{
};