我知道可以使用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
但它显然不起作用。