2016. 2. 1. 16:55

CAtlArray의 Linux(gcc) 버전

[프로그래밍/Let's Share it] - Linux/gcc에서 CStringA MFC Class 사용하기

과 유사합니다. Linux/Gcc에서 CAtlArray를 사용하기 위한 class를 공유합니다.


#include "stdafx.h"
#include <stdio.h>
#include <vector>

template<typename E>
class CAtlArrayMy
{
public:
	CAtlArrayMy() { }
	~CAtlArrayMy() { }

	size_t Add(E element)
	{
		try
		{
			m_vector.push_back(element);
		}
		catch(...)
		{
		}
		return m_vector.size();
	}

	size_t GetCount()
	{
		return m_vector.size();
	}

	void RemoveAll()
	{
		m_vector.clear();
	}

	E& GetAt(size_t iElement)
	{
		return m_vector[iElement];
	}

	void SetAt(size_t iElement, E element)
	{
		m_vector[iElement] = element;
	}

	bool IsEmpty()
	{
		return m_vector.empty();
	}

	E& operator[] (size_t iElement)
	{
		return m_vector[iElement];
	}

	void InsertAt(size_t iElement, E element, size_t nCount=1)
	{
		try
		{
			if (m_vector.size() < iElement)
			{
				m_vector.resize(iElement);
			}
			m_vector.insert(m_vector.begin()+iElement, nCount, element);
		}
		catch(...)
		{
		}
	}

public:
	std::vector<E> m_vector;
};


int main(void)
{
	printf("---\r\n");
	CAtlArrayMy<int> arr;
	int* ptr = NULL;
	size_t i = 0;

	arr.Add(3);
	arr.Add(4);
	arr.Add(5);
	arr.Add(6);

	arr.InsertAt(10, 9, 4);

	printf("... %d\r\n", (int)arr.GetCount());

	ptr = &arr[0];

	for (i=0; i<arr.GetCount(); i++)
	{
		printf("[%d] %d, %d\r\n", (int)i, arr[i], ptr[i]);
	}

	printf("...%d\r\n", arr.IsEmpty());
	arr.RemoveAll();
	printf("...%d\r\n", arr.IsEmpty());

	return 0;
}

위 code는 Windows / Linux 모두 compile이 되며, Windows의 CAtlArray와 동일한 결과를 생성합니다.