使用SFINAE在运行时检查方法参数

时间:2016-05-06 03:48:28

标签: c++11

我知道可以使用C ++ 11中的表达式SFINAE来检查特定方法的存在,如下所示。 但是我找不到的是一个做同样的例子,也检查方法参数。特别是我想匹配一个带有const参数的方法。

#include <iostream>

struct A
{
    void method() const
    {
      return;
    }
};


template <typename T, typename = std::string>
struct hasMethod
        : std::false_type
{

};

template <typename T>
struct hasMethod<T, decltype(std::declval<T>().method())>
        : std::true_type
{ };

int main() {

    std::cout << hasMethod<A>::value << std::endl;
}

实际上我希望hasMethod::匹配

    void method(const Type& t) const
    {
      return;
    } 

传递给decltype的语法是什么? 我试过了:

struct hasMethod<T, decltype(std::declval<T>().method(const int&))>
        : std::true_type

但它显然不起作用。

0 个答案:

没有答案