[英]What does `class =` inside template mean?
我在C代码中找到了这个构造:
template<typename T, class = decltype(std::declval<T>() < std::declval<T>())>
struct check : std::true_type {};
现在,我了解了它的作用,但我不了解它的作用。 如果类型T
不支持<
-operator,则抛出编译错误。 但是,显然,当将class
更改为其他内容时,整个内容将无法编译并引发语法错误。
class = sometypename
是什么意思?
class
是一样的typename
这里。 您也可以这样做:
template<typename T, typename = decltype(std::declval<T>() < std::declval<T>())>
struct check : std::true_type {};
您可以为模板参数指定默认值。 例如
template<typename X = int> struct test { };
如果不使用模板参数,也可以省略它们的名称:
template<typename = int> struct test { };
因此,在您的示例中,第二个模板参数只是带有默认参数的未命名参数。
使这个工作称为SFINAE概念(取代失败不是错误)和用于实现std::enable_if<>
等http://en.cppreference.com/w/cpp/language/sfinae
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.