8.11. Writing a Class Template
Problem
You have a class whose members need to be different types in different situations, and using conventional polymorphic behavior is cumbersome or redundant. In other words, as the class designer, you want a class user to be able to choose the types of various parts of your class when he instantiates it, rather than setting them all in the original definition of the class.
Solution
Use a class template to parameterize types that can be used to declare class members (and much more). That is, write your class with placeholders for types; thus, leaving it to the user of the class template to choose which types to use. See Example 8-12 for an example of a tree node that can point to any type.
Example 8-12. Writing a class template
#include <iostream> #include <string> using namespace std; template<typename T> class TreeNode { public: TreeNode(const T& val) : val_(val), left_(NULL), right_(NULL) {} ~TreeNode() { delete left_; delete right_; } const T& getVal() const {return(val_);} void setVal(const T& val) {val_ = val;} void addChild(TreeNode<T>* p) { const T& other = p->getVal(); if (other > val_) if (right_) right_->addChild(p); else right_ = p; else if (left_) left_->addChild(p); else left_ = p; } const TreeNode<T>* getLeft() {return(left_);} const TreeNode<T>* getRight() {return(right_);} private: T val_; TreeNode<T>* left_; TreeNode<T>* right_; }; int main() { TreeNode<string> node1("frank"); TreeNode<string> node2("larry"); TreeNode<string> node3("bill"); ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access