KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Partial template specialization is one of the most important concepts for generic programming in C++. For example: to implement a generic swap function: template <typename T> void swap(T &x, T &y) { const T tmp = x; y = x; x = tmp; } To specialize it for a vector to support O(1) swap: template <typename T, class Alloc> void swap(vector<T, Alloc> &x, vector<T, Alloc> &y) { x.swap(y); } So you can always get optimal performance when you call swap(x, y) in a generic function; Much appreciated, if you can post the equivalent (or the canonical example of partial specialization of the language if the language doesn't support the swap concept) in alternative languages. EDIT : so it looks like many people who answered/commented really don't known what partial specialization is, and that the generic swap example seems to get in the way of understanding by some people. A more general example would be: template <typename T> void foo(T x) { generic_foo(x); } A partial specialization would be: template <typename T> void foo(vector<T> x) { partially_specialized_algo_for_vector(x); } A complete specialization would be: void foo(vector<bool> bitmap) { special_algo_for_bitmap(bitmap); } Why this is important? because you can call foo(anything) in a generic function: template <typename T> void bar(T x) { // stuff... foo(x); // more stuff... } and get the most appropriate implementation at compile time. This is one way for C++ to achieve abstraction w/ minimal performance penalty. Hope it helps clearing up the concept of "partial specialization". In a way, this is how C++ do type pattern matching without needing the explicit pattern matching syntax (say the matc
Tags (comma-separated)
Save Edits
Cancel