일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- 삼성역테
- MCU 딥러닝
- 컴퓨팅사고
- 영상처리
- 딥러닝
- 코딩테스트
- BFS
- 포스코 교육
- 삼성코테
- TensorFlow Lite
- tinyml
- tflite
- 임베디드 딥러닝
- 초소형머신러닝
- dfs문제
- 포스코 ai 교육
- 삼성역량테스트
- DP문제
- 그리디
- sort
- 포스코 AI교육
- 자료구조
- 삼성코딩테스트
- 코테 문제
- 코테
- bfs문제
- DP
- dfs
- 다이나믹프로그래밍
- Today
- Total
코딩뚠뚠
[C/C++] boost libraries 본문
C++ 은 복잡하고 방대한 언어이다.
STL 이라는 표준 라이브러리를 제공하지만 여전히 부족하다.
이를 보완하기 위한 라이브러리가 boost libraries 이다.
libraries라는 이름에서부터 느낄 수 있듯 boost 자체도 매우 방대하고 또 사용하기 어렵다.
주로 무엇을 보완하기 위해서 사용할까?
shared_ptr
boost의 존재보다 더 유명한 클래스였지만 C++11에 std::shared_ptr이 포함되어 사용할 수 있다.
C++11 환경을 사용하지 못한다면 대안으로 사용가능하다.
ex) shared_ptr을 사용하여 자원관리를 한다.
shared_ptr이 파괴될때 fclose가 호출되기 때문에 파일 포인터 자원이 자동적으로 소거된다.
생성시에만 파괴루틴을 등록 후 신경쓰지 않아도 되어 버그가 줄어든다.
또한 예외 발생시에도 자원을 안전하게 파괴할 수 있다.
#include "boost/shared_ptr.hpp"
typedef boost::shared_pt<void> vsptr;
void
MergeFile3(LPCSTR dst, LPCSTR src1, LPCSTR src2)
{
FILE *dfp;
FILE *sfp1;
FILE *sfp2;
dfp = fopen(dst, "wb");
if(!dfp)
return;
vsptr dfp_closer(dfp, fclose);
sfp1 = fopen(src1, "rb");
if(!sfp1)
return;
vsptr sfp1_closer(sfp1, fclose);
sfp2 = fopen(src2, "rb");
if(!sfp2)
return;
vsptr sfp2_closer(sfp2, fclose);
// 실제 처리할 작업
}
bind
함수 호출 객체를 만들어주는 역할을 한다.
ex) a b c d e 파라미터로 1 2 3 4 5를 전달해서 호출하는 함수객체를 만든다.
#include "boost/bind.hpp"
int fn(int a, int b, int c, int d, int e)
{
printf("a = %d, b = %d, c = %d, d = %d, e = %d\n", a, b, c, d , e);
return a + b + c + d + e;
}
int main()
{
printf("%d\n", boost::bind(fn, 1, 2, 3, 4, 5)());
return 0;
}
//http://www.jiniya.net/wp/archives/11769
thread
멀티스레드를 사용하는것은 플랫폼마다 지원 방식에 차이가 있어 표준적인 방식으로 사용하기는 어렵다.
하지만 boost::thread 를 사용하면 멀티 플랫폼을 지원하는 코드를 작성할 수 있다.
ex) boost::thread 생성자로 스레드 함수 포인터와 파라미터를 전달해서 스레드를 생성시킨다.
#include "stdio.h"
#include "boost/thread.hpp"
void ThreadProc(const char *msg)
{
printf("%s\n", msg);
}
int main()
{
boost::thread th1(ThreadProc, "Mark");
boost::thread th2(ThreadProc, "Bob");
th1.join();
th2.join();
return 0;
}
references :
http://www.jiniya.net/wp/archives/11769
https://redcoder.tistory.com/142
https://ko.wikipedia.org/wiki/Boost