当我第一次学会了如何在一个类检查特定的签名,我学会了使用std::void_t
,写一些像这样的代码:为了检查一个类是否有一个具有特定签名的方法,是否需要`void_t`?
template<typename T, typename =void>
class HAS:public false_type{};
template<typename T>
class HAS<T,void_t<decltype(declval<T>().print())>>:public true_type{};
而这个代码片段将检查如果一个类有一个名为方法“print()
”。它运作良好。
但是,当我试图删除std::void_t
,它仍然工作。
的代码看起来是这样的:
template<typename T, typename = void>
class HAS:public false_type{};
template<typename T>
class HAS<T,decltype(declval<T>().print())>:public true_type{};
所以我很困惑,如果“std::void_t
”是必要的检查,如果一个类与特定签名的方法?或者那只是一个巧合?
谢谢你,当我在等待这个问题的答案,我改变了打印的返回类型为int。正如你所说,它失败了。非常感谢。 – Kidsunbo
那真是巧合! – alfC