检测 C++ class 是否有模板方法

Detect if C++ class has a template method

我知道如何在 C++ 中检测变量或常规方法的存在 class。但是,当方法是模板时,该怎么做呢?考虑代码:

struct SomeClass
{
    template<typename Sender, typename T>
    auto& send(T& object) const
    {
        Sender::send(object);
        return object;
    };
};

如何编写类似 is_sendable 的内容,以便 is_sendable<SomeClass>::value(或任何其他语法)returns 为真,因为 SomeClass 具有如上所述的方法 send

好的,我成功地解决了它,如果有人感兴趣:

我需要创建一个虚拟对象 class

class DummySender
{
    public:
        template<typename T>
        static void send(const T&)
        {}
};

然后我可以通过定义类型特征来检查发送方法是否存在:

template<typename T, typename = void>
struct IsSendable: std::false_type
{};

template<typename T>
struct IsSendable<T, decltype(std::declval<T>().send<DummySender>(std::cout), void())> : std::true_type
{};

终于有IsSendable<SomeClass>::value.