본문 바로가기
프로그래밍 _공부자료./C++ 공부

C++ 클래스 Template 예제 5가지

by 대구부자 2023. 2. 12.
반응형

C++ 공부 하다가 보면 class template(클래스 템플릿 예제 5가지)

 

예제1)

template <typename T>
class SimpleTemplate
{
public:
    SimpleTemplate(T value) : m_value(value) {}
    T getValue() const { return m_value; }
private:
    T m_value;
};

int main()
{
    SimpleTemplate<int> s1(5);
    std::cout << s1.getValue() << std::endl;
    SimpleTemplate<double> s2(5.5);
    std::cout << s2.getValue() << std::endl;
    return 0;
}

실행 결과)

5
5.5

 

예제2)

template <typename T1, typename T2>
class DualTemplate
{
public:
    DualTemplate(T1 value1, T2 value2) : m_value1(value1), m_value2(value2) {}
    T1 getValue1() const { return m_value1; }
    T2 getValue2() const { return m_value2; }
private:
    T1 m_value1;
    T2 m_value2;
};

int main()
{
    DualTemplate<int, double> d1(5, 5.5);
    std::cout << d1.getValue1() << " " << d1.getValue2() << std::endl;
    DualTemplate<double, int> d2(5.5, 5);
    std::cout << d2.getValue1() << " " << d2.getValue2() << std::endl;
    return 0;
}

출력 

5 5.5
5.5 5

 

 

예제3)

template <typename T>
class Counter
{
public:
    Counter() { ++m_count; }
    static int getCount() { return m_count; }
private:
    static int m_count;
};

template <typename T>
int Counter<T>::m_count = 0;

int main()
{
    Counter<int> c1;
    Counter<int> c2;
    Counter<double> c3;
    std::cout << Counter<int>::getCount() << std::endl;
    std::cout << Counter<double>::getCount() << std::endl;
    return 0;
}

출력)

2

1

 

예제4)

template <typename T>
class Sorter
{
public:
    Sorter(std::vector<T> values) : m_values(values) {}
    void sort()
    {
        std::sort(m_values.begin(), m_values.end());
    }
    void print() const
    {
        for (const auto &value : m_values)
        {
            std::cout << value << " ";
        }
        std::cout << std::endl;
    }
private:
    std::vector<T> m_values;
};

int main()
{
    Sorter<int> s1({ 5, 4, 3, 2, 1 });
    s1.sort();
    s1.print();
    return 0;
}

Output:

1 2 3 4 5

 

 

 

예제 5)

template <typename T>
class Printer
{
public:
    Printer(T value) : m_value(value) {}
    void print() const
    {
        std::cout << m_value << std::endl;
    }
private:
    T m_value;
};

template <>
class Printer<bool>
{
public:
    Printer(bool value) : m_value(value) {}
    void print() const
    {
        std::cout << (m_value ? "true" : "false") << std::endl;
    }
private:
    bool m_value;
};

int main()
{
    Printer<int> p1(5);
    p1.print();
    Printer<bool> p2(true);
    p2.print();
    return 0;
}

Output:

5 true

반응형

댓글