Cambo Freelance
ទំព័រដើមសេវាកម្មអត្ថបទការបង្រៀនក្រុមវគ្គបណ្តុះបណ្តាលទំនាក់ទំនង
Cambo Freelance

Professional freelance team from Cambodia delivering technology-driven solutions with cultural insight and modern expertise.

ផ្ញើសាររបស់អ្នក

ត្រៀមចាប់ផ្តើមគម្រោងរបស់អ្នក? ទំនាក់ទំនងក្រុមរបស់យើង។

ទំនាក់ទំនង

សេវាកម្ម

  • Web & Mobile Development Services
  • Graphic Design & Branding Services

តំណភ្ជាប់មានប្រយោជន៍

  • ទំព័រដើម
  • សេវាកម្ម
  • ការសិក្សា
  • អំពីយើង
  • ទំនាក់ទំនង
  • តម្លៃ

© 2026 Cambo Freelance. រក្សាសិទ្ធិទាំងអស់។

TelegramFacebookLinkedInEmail
HomeTutorialsC++C++ Templates
⚡C++ Tutorials

50 lessons

Beginner(21)1C++ Introduction2C++ Getting Started3C++ Syntax4C++ Output5C++ Comments6C++ Variables7C++ Data Types8C++ Constants9C++ User Input10C++ Operators11C++ Strings12C++ Math13C++ Booleans14C++ Conditions15C++ Switch16C++ Loops17C++ Break and Continue18C++ Arrays19C++ Functions20C++ References21C++ Pointers
Intermediate(19)22C++ Classes23C++ Objects24C++ Constructors25C++ Access Specifiers
Advanced(10)41C++ Smart Pointers42C++ Templates43C++ Lambda Functions44
⚡

C++ Tutorials

Lesson 42 of 50

All lessons
Beginner (21)1C++ Introduction2C++ Getting Started
26
C++ Encapsulation
27C++ Inheritance
28C++ Polymorphism
29C++ Abstraction
30C++ Files
31C++ Exception Handling
32C++ Namespaces
33C++ Structures
34C++ Enumerations
35C++ STL Introduction
36C++ Vectors
37C++ Maps
38C++ Sets
39C++ Queues
40C++ Stacks
C++ Move Semantics
45C++ Multithreading
46C++ Design Patterns
47C++ Memory Management
48C++17 Features
49C++20 Features
50C++ Performance Optimization
3
C++ Syntax
4C++ Output
5C++ Comments
6C++ Variables
7C++ Data Types
8C++ Constants
9C++ User Input
10C++ Operators
11C++ Strings
12C++ Math
13C++ Booleans
14C++ Conditions
15C++ Switch
16C++ Loops
17C++ Break and Continue
18C++ Arrays
19C++ Functions
20C++ References
21C++ Pointers
Intermediate (19)22C++ Classes23C++ Objects24C++ Constructors25C++ Access Specifiers26C++ Encapsulation27C++ Inheritance28C++ Polymorphism29C++ Abstraction30C++ Files31C++ Exception Handling32C++ Namespaces33C++ Structures34C++ Enumerations35C++ STL Introduction36C++ Vectors37C++ Maps38C++ Sets39C++ Queues40C++ Stacks
Advanced (10)41C++ Smart Pointers42C++ Templates43C++ Lambda Functions44C++ Move Semantics45C++ Multithreading46C++ Design Patterns47C++ Memory Management48C++17 Features49C++20 Features50C++ Performance Optimization
⚡C++AdvancedLesson 42 of 50CamboFreelanceJune 19, 2026

C++ Templates

Learn C++ templates to write generic reusable code. Create function templates and class templates that work with any data type.


Tutorials › C++ › Templates
Advanced10 min readLesson 42 of 50

What are Templates?

Templates allow writing generic code that works with any data type. The compiler generates the actual type-specific code at compile time.

Function Templates

#include <iostream>
using namespace std;

template <typename T>
T maximum(T a, T b) {
    return (a > b) ? a : b;
}

template <typename T>
void printArray(T arr[], int size) {
    for (int i = 0; i < size; i++) cout << arr[i] << " ";
    cout << endl;
}

int main() {
    cout << maximum(3, 7)        << endl;    // int version: 7
    cout << maximum(3.14, 2.71)  << endl;    // double: 3.14
    cout << maximum('a', 'z')    << endl;    // char: z

    int    ints[]   = {1, 2, 3, 4, 5};
    double doubles[] = {1.1, 2.2, 3.3};
    printArray(ints,    5);
    printArray(doubles, 3);
    return 0;
}

Output:

7
3.14
z
1 2 3 4 5
1.1 2.2 3.3

Class Templates

template <typename T>
class Stack {
  private:
    vector<T> data;
  public:
    void push(T val)   { data.push_back(val); }
    void pop()         { data.pop_back(); }
    T    top()         { return data.back(); }
    bool empty()       { return data.empty(); }
    int  size()        { return data.size(); }
};

Stack<int>    intStack;
Stack<string> strStack;

intStack.push(10); intStack.push(20);
cout << intStack.top() << endl;   // 20

strStack.push("hello");
cout << strStack.top() << endl;   // hello

Multiple Type Parameters

template <typename K, typename V>
class Pair {
  public:
    K key; V value;
    Pair(K k, V v) : key(k), value(v) { }
    void print() { cout << key << " -> " << value << endl; }
};

Pair<string, int>    p1("age", 25);
Pair<int,    double> p2(1, 3.14);
p1.print();   // age -> 25
p2.print();   // 1 -> 3.14

Exercise

Write a function template swap(T& a, T& b) that swaps two values of any type. Test it with int, double, and string.

Show Solution
#include <iostream>
using namespace std;

template <typename T>
void swapValues(T& a, T& b) {
    T temp = a; a = b; b = temp;
}

int main() {
    int    x = 5,   y = 10;   swapValues(x, y); cout << x << " " << y << endl;
    double a = 1.5, b = 2.5;  swapValues(a, b); cout << a << " " << b << endl;
    string s1 = "hi", s2 = "bye"; swapValues(s1, s2); cout << s1 << " " << s2 << endl;
    return 0;
}

Quiz

  1. What keyword introduces a template parameter?

    • A) generic
    • B) template with typename
    • C) type
    • D) auto
    Answer

    B) template <typename T>

Summary

  • Templates enable generic, type-independent code.
  • Function templates work with any type: template <typename T> T func(T a).
  • Class templates create generic data structures.
  • The compiler instantiates the correct version at compile time.
← Previous: Smart Pointers Next: Lambda Functions →
c++templatesgenericsadvanced
PreviousLesson 41: C++ Smart PointersNextLesson 43: C++ Lambda Functions
Back to All Tutorials