繁体   English   中英

模板内部的“ class =”是什么意思?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM