c++ - 模板中的 `class =` 是什么意思?

标签 c++ templates

我在 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 { };

因此在您的示例中,第二个模板参数只是一个带有默认参数的未命名参数。

关于c++ - 模板中的 `class =` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728432/

相关文章:

C++ 调试;我看不到错误 :(

c++ - 如何通过保存在容器中的成员函数指针来调用?

c++ - 函数模板重载(不同数据类型验证函数作为参数)

c# - 泛型类型的转换无效

c++ - 将 dlib 添加到 C++ eclipse

c++ - 使用 SWScale 的 FFMpeg RGB32 到 NV12

python - 将 argv 的元素复制到新数组中

c++ - 使用另一个类模板专门化一个类模板时, `template<>` 是可选的吗?

c++ - 从一组有限的类静态转换为一个类

c - C 头文件和源文件的标准结构