[Visual Studio] boost 라이브러리 설치 및 설정 2015-07-21

C++ 개발시 비표준 라이브러리이지만 활용도가 높은 boost를 다음과 같이 설치 및 설정하고 사용한다.

 

1. boost 라이브러리(http://www.boost.org)를 다운로드한다.
boost1
boost2

2. 라이브러리 폴더에 압축을 해제하고 bootstrap.bat 파일을 실행하면 b2.exe, bjam.exe 파일이 생성된다.
boost3

3. 커멘드창에 다음 명령을 실행하면 라이브러리가 빌드되고 경로를 나타내준다.

{설치 경로}\b2 toolset=msvc-11.0 variant=debug,release link=static threading=multi address-model=32 runtime-link=static

boost4
boost5

4. 프로젝트를 로딩 또는 생성한 상태에서 다음과 같이 경로를 추가한다.

* 보기 > 속성페이지 > 구성속성 > VC++ 디렉터리 > 포함 디렉터리
=> "C:/{PATH}/enviroment/c++"를 추가
* 보기 > 속성페이지 > 구성속성 > 링커 > 일반 > 추가 라이브러리 디렉터리
=> "C:\{PATH}\enviroment\c++\stage\lib"를 추가

[Visual Studio] Subversion 연동 2015-07-20

Visual Studio에서 서브버전을 사용하기 위해서는 플러그인을 설치해야만 한다. 가장 많이 이용되는 AnkhSVN을 설치해 보자.

 

1) 사이트 접속 (https://ankhsvn.open.collab.net) > Download 클릭
vs_svn

 

2) Visual Studio 버전에 맞춰 다운로드
vs_svn1

 

3) 가입을 하거나 우측 하단에 ‘Skip registration and download the software’를 클릭하면 설치 파일이 다운로드 된다.
vs_svn2

 

4) 안내에 따라 설치를 진행한다.
vs_svn3

 

5) 도구 > 옵션 > 소스 제어 > 플러그인선택 > AnkhSVN을 선택 > 확인
vs_svn4

 

6) 파일 > Subversion 메뉴가 생성되었음을 확인할 수 있다.
vs_svn5

[C++정리] 제네릭 프로그래밍을 위한 템플릿 사용 2015-07-06

제네릭 프로그래밍(Generic programming)이란 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식으로 템플릿은 STL 제네릭 프로그래밍의 핵심이라고 할 수 있다.

#include "stdafx.h"
#include <iostream>

using namespace std;

// 오버로딩을 통한 구현
// - 함수 오버로드
void PrintOverload(int a, const char* b)
{
	cout << a << "::" << b << "\n";
}
void PrintOverload(double a, const char* b)
{
	cout << a << "::" << b << "\n";
}
// - 클래스 생성
class PrintClass1
{
public:
	PrintClass1(int a)
	{
		cout << a << "\n";
	}
};
class PrintClass2
{
public:
	PrintClass2(double a)
	{
		cout << a << "\n";
	}
};
class PrintClass3
{
public:
	PrintClass3(const char* a)
	{
		cout << a << "\n";
	}
};

// 템플릿을 통한 구현
// - 함수 템플릿
template<typename T1, typename T2>
void PrintTemplate(T1 a, T2 b)
{
	cout << a << "::" << b << "\n";
}
// - 클래스 템플릿
template<typename T=int, int number=10>
class PrintClassTemplate
{
public:
	PrintClassTemplate(T a)
	{
		cout << number << "::" << a << "\n";
	}
};

int _tmain(int argc, _TCHAR* argv[])
{	
	PrintOverload(10, "Overload");
	PrintOverload(11.1, "Overload");

	cout << "====================\n";

	PrintTemplate<int, const char*>(10, "Template");
	PrintTemplate<double, const char*>(11.1, "Template");

	cout << "====================\n";

	PrintClass1 printClass1(10);
	PrintClass2 printClass2(11.1);
	PrintClass3 printClass3("Class");

	cout << "====================\n";

	PrintClassTemplate<int, 1> printClass4(10);
	PrintClassTemplate<double, 2> printClass5(11.1);
	PrintClassTemplate<const char*, 3> printClass6("Class");
	// 매개변수에 아무값도 지정하지 않을경우
	// 기본형 typename T=int, int number=10으로 인식된다.
	PrintClassTemplate<> printClass7(10);

	return 0;
}
* 템플릿을 사용해 비슷한 유형의 클래스를 용도별로 구현하지 않고도 유연하게 활용할 수 있다.