c++ - 部分类特化只是编写完整特化的另一种方式吗?

标签 c++ templates

这两个专业本质上是在做同样的事情吗?

//generic:
template<class T>
struct A{
  ...
 }

template<class T>
struct A<int>{
  ...
 }

template<>
struct A<int>{
  ...
 } 

也就是说,在我看来,任何部分特化都可以重写为完全特化。

最佳答案

不,不是。好吧,在图灵 tar 坑中,每一种足够强大的编程技术都等同于每一种其他技术。

template<typename A, typename B>
struct foo:std::false_type {};
template<typename T>
struct foo<T,T>:std::true_type {};

在这里,我的偏特化将两个参数映射到一个。更高级的东西,比如:

template<typename T>
struct foo<T,std::vector<T>>:std::integral_constant<int, 7> {};

也是可以的。

你甚至可以用一个参数 template 来做到这一点:

template<typename T>
struct is_func_signature : std::false_type {};

template<typename R, typename... Args>
struct is_func_signature< R(Args...) >: std::true_type {};

我们在多个类型参数上对一个参数进行模式匹配,并提取它们。

偏特化是对第一个接口(interface)有效的参数进行模式匹配的游戏。

关于c++ - 部分类特化只是编写完整特化的另一种方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16765776/

相关文章:

c++ - 从 C++ 应用程序自动构建 Lua api

c++ - 在 C++ 中使用模板的问题

java - org.apache.velocity.exception.ResourceNotFoundException 异常

c++ - 为什么无法从模板方法访问此类自己的 protected 成员?

c++ - C++ 中的模板、类型名和类

c++ - 二叉搜索树插入如何使用递归工作?

c++ - QT:忽略复选框选择的关键事件

c++ - 我可以自动调用 abcclientproxy.cpp 方法构建测试代码吗,由 gSOAP 2.8.16 从 abc.h 生成

c++ - 使用 C++ 模板从成员变量进行接口(interface)转发

c++ - 尝试为 Windows API 包装器实现事件处理程序时遇到问题