模板部分专业化 - 有现实世界的例子吗?

2024-03-01

我正在思考partial specialization。虽然我理解这个想法,但我还没有看到这种技术在现实世界中的任何用法。Full specialization被用在很多地方STL所以我对此没有问题。你能告诉我一个现实世界的例子吗?partial specialization用来?如果示例位于STL那会更优越!


C++0x 附带unique_ptr这是替代品auto_ptr它将被弃用。

如果你使用unique_ptr对于数组类型,它使用delete[]释放它,并提供operator[]等等。如果您将它与非数组类型一起使用,它会使用delete。这需要部分模板专业化,例如

template<typename T>
struct my_unique_ptr { ... };

template<typename T>
struct my_unique_ptr<T[]> { ... };

另一个用途(尽管非常值得怀疑)是std::vector<bool, Allocator>在标准库中。 bool 特化使用空间优化将 bool 打包成单独的位

template<typename T, typename Allocator = std::allocator<T> >
struct vector { ... };

template<typename Allocator>
struct vector<bool, Allocator> { ... };

还有一个用途是std::iterator_traits<T>。需要迭代器来定义嵌套的 typedefvalue_type, reference和其他正确的类型(对于常量迭代器,reference通常会是T const&,例如),因此算法可以使用它们来完成工作。主模板依次使用迭代器类型的类型成员

template<typename T>
struct iterator_traits { 
  typedef typename T::value_type value_type; 
  ...
};

对于指针来说,这当然行不通。他们有部分专业化

template<typename T>
struct iterator_traits<T*> {
  typedef T value_type;
  ...
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板部分专业化 - 有现实世界的例子吗? 的相关文章

随机推荐