相关疑难解决方法(0)

我们可以使用检测习惯来检查一个类是否具有特定签名的成员函数吗?

给定(减少)检测习语的实现

namespace type_traits
{
    template<typename... Ts>
    using void_t = void;

    namespace detail
    {
        template<typename, template<typename...> class, typename...>
        struct is_detected : std::false_type {};

        template<template<class...> class Operation, typename... Arguments>
        struct is_detected<void_t<Operation<Arguments...>>, Operation, Arguments...> : std::true_type {};
    }

    template<template<class...> class Operation, typename... Arguments>
    using is_detected = detail::is_detected<void_t<>, Operation, Arguments...>;

    template<template<class...> class Operation, typename... Arguments>
    constexpr bool is_detected_v = detail::is_detected<void_t<>, Operation, Arguments...>::value;
}
Run Code Online (Sandbox Code Playgroud)

我们可以轻松检查一个类是否foo包含成员函数bar

struct  foo {
    int const& bar(int&&) { return 0; }
};

template<class T>
using bar_t = …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae type-traits c++14

3
推荐指数
1
解决办法
1688
查看次数

标签 统计

c++ ×1

c++14 ×1

sfinae ×1

templates ×1

type-traits ×1