본문 바로가기
공부/C C++

[C/C++] boost libraries

by 로디네로 2022. 12. 11.
반응형

 

 

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

 

반응형

댓글