wiki:cpp-partial-specialization
Table of Contents
C++ Partial specialization
Partial specialization allows template classes (not functions) to define specialized versions for particular template parameter patterns. For example, a template class can have a separate specialization for pointer types or for template types, enabling different implementations for different type categories.
Use partial specialization to provide optimized or behavior-specific implementations for certain template argument patterns.
Example
This example shows partial specialization for pointers and containers.
// compile: g++ -std=c++17 -o partial partial.cpp // run: ./partial // description: partial specialization customizes templates for parameter patterns #include <iostream> #include <vector> // Primary template template <typename T> class Printer { public: void print(const T& x) { std::cout << "Generic\n"; } }; // Partial specialization for pointers template <typename T> class Printer<T*> { public: void print(T* const& x) { std::cout << "Pointer specialization\n"; } }; // Partial specialization for containers template <typename T> class Printer<std::vector<T>> { public: void print(const std::vector<T>& x) { std::cout << "Vector specialization\n"; } }; int main() { Printer<int> p1; p1.print(42); Printer<int*> p2; int x = 10; p2.print(&x); Printer<std::vector<int>> p3; std::vector<int> v{1, 2, 3}; p3.print(v); return 0; }
wiki/cpp-partial-specialization.md · Last modified: by 127.0.0.1
