SW/C++

C++ : 클래스 템플릿 : 예제, 사용법, 구현 방법, 추천

얇은생각 2020. 4. 21. 07:30
반응형

C++ : 클래스 템플릿 : 예제, 사용법, 구현 방법, 추천

 

MyArray.h

#pragma once

namespace samples
{
	template<typename T>
	class MyArray
	{
	public:
		MyArray();

		bool Add(const T& data);
		size_t GetSize() const;

	private:
		enum { MAX = 3 };

		size_t mSize;
		T mArray[MAX];
	};

	template<typename T>
	MyArray<T>::MyArray()
		: mSize(0)
	{
	}

	template<typename T>
	size_t MyArray<T>::GetSize() const
	{
		return mSize;
	}

	template<typename T>
	bool MyArray<T>::Add(const T& data)
	{
		if (mSize >= MAX)
		{
			return false;
		}

		mArray[mSize++] = data;

		return true;
	}
}

 

 

MyArrayExample.cpp

#include <iostream>
#include "IntVector.h"
#include "MyArray.h"
#include "MyArrayExample.h"

using namespace std;

namespace samples
{
	void MyArrayExample()
	{
		MyArray<int> scores;
		scores.Add(10);
		scores.Add(50);
		
		cout << "scores - Size: " << scores.GetSize() << endl;
		
		MyArray<IntVector> intVectors;
		intVectors.Add(IntVector(1, 1));
		intVectors.Add(IntVector(5, 3));

		cout << "intVectors - Size: " << intVectors.GetSize() << endl;

		MyArray<IntVector*> intVectors2;

		IntVector* intVector = new IntVector(3, 2);
		intVectors2.Add(intVector);
		
		cout << "intVectors2  - Size: " << intVectors2.GetSize() << endl;

		delete intVector;
	}
}

 

좋은 예제가 있어 기록을 남깁니다. 헤더파일안에 템플릿 구현 함수를 포함시켜야 하는 이유와 개념에 대해서도 알 수 있엇고, 일반적으로 다양한 인수값을 템플릿 클래스로 구현하기 위해서, 참조형태로 값을 받아 넣는 방식에 대해서도 알 수 있었습니다. 템플릿 클래스를 구현할 떄, 위 방식을 잘 활용하여 구현하도록 하겠습니다.

 

참조한 예제는 아래에서 확인하실 수 있습니다.

 

https://github.com/POCU/COMP3200CodeSamples/tree/master/09

 

POCU/COMP3200CodeSamples

Code samples for COMP3200. Contribute to POCU/COMP3200CodeSamples development by creating an account on GitHub.

github.com

반응형