boost 1.59 버전에서 새롭게 추가된 컨데이너...


랭킹 관련한 처리를 할때 이용하기 좋아보인다...


아래는 그냥 샘플 코드...




by 널부러 2016. 4. 19. 13:06

예전에는 boostpro 라고 빌드 해주는 팀(?)이 있는데... 그팀이 없어져서 빌드된 파일은 어디서 받는지 몰랐는데..


boost 공홈에 다운로드 링크 들어가다보면 바이너리 쪽에가면 빌드된것을 받을수가 있더군요 -_-;


주소 남겨 봅니다.. 빌드 귀찮으면 여기가서 받아서 쓰세요..


https://sourceforge.net/projects/boost/files/boost-binaries/

by 널부러 2016. 4. 19. 11:58
by 널부러 2014. 3. 11. 21:43
#include "stdafx.h"

#include <iostream>
#include <regex>
#include <fstream>

#include "errorDefine.h"

int _tmain(int argc, _TCHAR* argv[])
{
    std::ifstream openFile;
    openFile.open("errorDefine.h");

    if( !openFile.is_open() )
    {
        return 0;
    }
   
    // 파싱할 내용
    std::regex startEndRegex( "[{}]" );
    std::regex indexRegex ("(-?[0-9]+),[^0-9]");
    std::regex defineRegex ("[0-9a-zA-Z_]+");
    std::regex logMessageRegex("// ");

    int index = 0;
    bool startPrint = false;
    while( openFile.good() )
    {
        std::string stringLine;
        std::string defineString;
        std::string logMessage;

        std::smatch indexMatch;
        std::smatch defineMatch;
        std::smatch logMessageMatch;
        std::smatch startEndMatch;

        // 파일 읽기
        std::getline( openFile, stringLine );

        // 공백 체크
        stringLine.erase( stringLine.find_last_not_of(' ') + 1 );
        if( 0 == stringLine.length()  )
            continue;
       
        // 시작 끝 체크
        if( true == std::regex_search(stringLine, startEndMatch, startEndRegex) )
        {
            startPrint = !startPrint;
            continue;
        }

        // 출력 여부 확인
        if( false == startPrint )
            continue;
   
        // define 인덱스 출력
        std::regex_search(stringLine,indexMatch,indexRegex);
        if( !indexMatch.empty() )
        {   
            std::string tempIndex = indexMatch[0];
            index = atoi( tempIndex.c_str() );
        }
        else
        {
            index++;
        }

        // define Name
        std::regex_search(stringLine, defineMatch, defineRegex);
        if( !defineMatch.empty() )
        {
            defineString = defineMatch[0];
        }

        // define 메시지
        std::regex_search(stringLine, logMessageMatch,logMessageRegex);
        if( !logMessageMatch.empty()  )
        {
            logMessage = logMessageMatch[0].second._Ptr;
        }
        else
        {
            logMessage = "***메시지가 없음 추가요망";
        }

        // 출력
        printf("index : %5d - defineName : %s - message : %s\n", index, defineString.c_str(), logMessage.c_str() );
    }

    return 0;
}
=== errorDefine.h
enum errorType
{
    RESULT_FAIL = -1,       // 에러
    RESULT_OK,              // 정상

    ERROR_1,                // 에러 메시지 출력(1번이에용)
    ERROR_2,                // 에러 메시지 출력(2번이에용)
    ERROR_3,           	    //
    ERROR_4 = 100,          // 중간에 변경된 번호야

    ERROR_TYPE_MAX,         // 에러 번호 끝
};
by 널부러 2013. 5. 3. 18:41

boost에서 xml, ini, json, info 확장자 파일을 쉽게 파싱 할수 있는데 그것이  property_tree ...

그중에서 젤 많이 쓰는 ini 파일 파싱 하는 코드를 올려본다.

- test.ini 파일 내용

[Section]
Value1 = text_string
Value2 = 10

- 소스 코드

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>

int _tmain(int argc, _TCHAR* argv[])
{
	// ptree 선언
	boost::property_tree::ptree pt;

	// 파일 읽어오기 
	boost::property_tree::ini_parser::read_ini( "test.ini", pt );
	
	// 문자열 읽기
	std::string value1 = pt.get<std::string>("Section.Value1");

	// 숫자 읽기 
	int value2 = pt.get<int>("Section.Value2");

	return 0;
}



by 널부러 2013. 4. 22. 15:02

bind, function 간단 사용 방법

boost, tr1 다 설명...



// bind 할 함수 
int sum( int a , int b )
{
	return a+b;
}

// boost bind 사용
// _1, _2 는 입력 인자
#include <boost/bind.hpp>

boost::bind( &sum, _1, _2 );

// tr1 bind 사용
// boost와는 다르게 인자를 쓸려면 std::tr1::placeholders 사용 해야함.
#include <functional>

std::tr1::bind( &sum, std::tr1::placeholders::_1, std::tr1::placeholders::_2 );

///////////////////////////////////////////////////////////////////////////////////////////////

// bind 한 함수를 담는 boost::function
#include <boost/function.hpp>

boost::function< int(int, int) > temp = boost::bind( &sum, _1, _2 );

// bind 한 함수를 담는 std::tr1::function
#include <functional>

std::tr1::function< int(int, int) > temp = std::tr1::bind( &sum, std::tr1::placeholders::_1, std::tr1::placeholders::_2 );

///////////////////////////////////////////////////////////////////////////////////////////////

// bind class 처리 - tr1 도 똑같아용....
class boostBind
{
private:
	std::vector< boost::function< int( int, int ) > > m_funcArray;	// 바인딩 한 함수를 모으기 위한 vector

public:
	boostBind() 
	{
		m_funcArray.push_back( boost::bind( &boostBind::sum, this, _1, _2 ) );
		m_funcArray.push_back( boost::bind( &boostBind::sub, this, _1, _2 ) );
	}
	~boostBind() {}

	int sum( int a , int b )
	{
		return a+b;
	}

	int sub( int a , int b )
	{
		return a-b;
	}

	void run()
	{
		// 덧셈 함수 호출
		int temp1 = m_funcArray[0]( 100, 200 );

		// 뺄셈 함수 호출 
		int temp2 = m_funcArray[1]( 200, 100 );
	}
};
by 널부러 2012. 10. 30. 19:26

어떤 자료형이든 다 넣을수 있는 그런 컨테이너...

사용법은 아래와 같다...

그런데 이건 어디다 써먹으면 좋을까? 잘모르겠지만 일단 정리...

#include <boost/any.hpp>

int main()
{
	boost::any all;
	
	// 아래와 같이 넣으면 int형으로 변경 
	// 값만 써도 알아서 인식하지만 확실하게 어떤 자료형이 들어갔는지 알기 위해 
	all = (int)100;
	
	// 이상태에서는 자료형은 안바뀌고 값만 갱신
	all = 200;

	// 여기서 다른 자료형으로 데이터를 넣으면 자료형도 변경 되면서 데이터 갱신
	all = (float)1.3f;

	// 값을 꺼내는 방법 첫번째 -  타입을 비교 하고 맞을때 값 꺼내기 
	if( all.type() == typeid(float) )
	{
		float &output = boost::any_cast<float &>(all);
	}

	// 값을 꺼내는 방법 두번째 -  try catch 문을 사용 해서 꺼내기 
	// 여기서는 실패에서 에러 나겠죵...
	try
	{
		int &otput = boost::any_cast<int &>(all);
	}
	catch(const boost::bad_any_cast &e)
	{
		printf("%s\n", e.what() );
	}
	
	// 변수 초기화는 요렇게???
	all = boost::any();

	if( all.empty() )
	{
		printf("아무것도 없네요\n");
	}
	
	return 0;
}


by 널부러 2012. 10. 18. 13:40

이거 쓰면 Thread를 그룹으로 묶어서 쓸수 있심..

사용법은 아래 보셈..

#include "boost/thread.hpp"

class threadFunc
{
    int m_a;
public:
    threadFunc( int a )
    {
        m_a = a;
    }

    void operator()()  
    {  
        printf("[%d]일단 들어왔네!!! [%d]\n", boost::this_thread::get_id(), m_a );

        Sleep(5000);

        printf("[%d] 끝났네 [%d]\n", boost::this_thread::get_id(), m_a );
    }  
};

int main()
{
    boost::thread_group tg;

    tg.create_thread( threadFunc(1) );                        // 1번 스래드 생성 
    tg.add_thread(new boost::thread( threadFunc(2) ) );        // 2번 스래드 생성 
    tg.add_thread(new boost::thread( threadFunc(3) ) );        // 3번 스래드 생성 

    //모든 스래드가 종료 될때까지 대기 
    tg.join_all();

    return 0;
}

by 널부러 2012. 10. 16. 22:36

문자를 숫자로 or 숫자를 문자로 바꿀때 사용 한다.

사용법은 간단하다.. 아래보셈..

#include "boost/lexical_cast.hpp"

int main()
{
    std::string input = "1";
    int output = 0;

    try
    {
        convertDta = boost::lexical_cast<int>( inputValue );
    }
    catch(boost::bad_lexical_cast &e)
    {
        // 변경이 안되면 아래 에러 출력
        printf("%s\n", e.what() );
        return false;
    }

    return 0;
}

그런데 이거 잘 써먹지는 못할듯..

문제가 2가지가 있심.. BYTE(unsigned char) 변환이 잘 안된다는거 하고

atoi(itoa), stringstream 등으로 변환하는거보단 촐랭 느리다는거...

아무튼 오늘도 뭔가 하나 올림..



by 널부러 2012. 10. 16. 21:38

boost의 mulit_index를 알기 쉽게 설명해준 자료가 있어 링크합니다..

(흥배님 감사합니다!!)



개념 설명은 위에것과 아래 첨부된 [SDC 3rd] 01 Boost_multiindex(2012-05-19).zip 파일을 보면 될것입니다.

composite_key 사용 설명은 따로 없어서 내가 추가로 정리 해서 boostTest._multi_index.zip 파일 올립니다.


[SDC 3rd] 01 Boost_multiindex(2012-05-19).zip


boostTest._multi_index.zip


by 널부러 2012. 10. 15. 23:54
| 1 |