본문 바로가기

[c++] C++14 형식연역 들어가기 C++에서 형식연역에서 다룰려고 한다. 형식연역은 미정인 형식이 호출 시점에 형식이 입력되는 값에 의해 결정되는 작업을 말한다. 형식연역은 형식추론이라고 한다. 즉, 주변 상황에 따라 형식을 추론해서 결정한다는 의미이다. 너무 복잡할 수 있지만 생각보다 단순하다(?). 작성자: ospace114@empal.com, http://ospace.tistory.com/ 템플릿 형식연역 일반적인 템플릿 함수 선언에 대한 형식을 살펴보자. template void f(ParamType param); f(expr); T로 표현되는 ParamType은 param 인자에 대한 형식이다. 그리고 함수 f()을 호출할 때 expr로 수식이 입력된다. 입력되는 값에 따라서 T의 형식을 결정하는 작업이 형식연역이다. .. 더보기
[c++] C++11 보편참조 사용하기 들어가기 보편참조는 C++에서 왼값 참조와 오른값 참조를 받을 수 있는 참조이다. 그러나 특수한 조건에서만 활성화되므로 잘 작동하는 것처럼 보여도 의도한대로 동작하지 않을 수 있다. 보편 참조는 템플릿 또는 auto을 사용하는 방법이 있다. 지금부터 보편 참조에 대해서 알아보자. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 템플릿 활용 보편 참조를 사용하기 위해서는 템플릿 구조를 가져야 한다. 일반적인 형태는 아래와 같다. template void f(T&& val) { cout 더보기
[c++] 오른값(r-value) 참조 이해하기 들어가기 C++11부터 포함된 저의 머리를 아프게 만든 오른값(r-value) 참조에 대해 살펴볼려고 한다. 실무에서 c++을 쓸 기회가 없어서 신경쓰고 있지 않다가 최근에 여유가 생겨서 한번 정리해 보았습니다. 저처럼 오른값 참조에 이해가 잘 안되는 시는 분에게 도움되었으면 하네요. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 왼값(l-value)과 오른값(r-value)??? 거칠게 말하면 값을 할당하는 등호 기준으로 등호 왼쪽이 왼값이고 등호 오른쪽이 오른값이다. int n = 10; 위의 예에서 보면 n은 왼값이고 10은 오른값이다. 그래서 일반적으로 오른값이 왼값에 할당하게 된다. 그렇기 때문에 오른값을 왼값 위치에서 사용할 수 없다. 다른 말로.. 더보기
protothreads 정리 들어가기 protothreads는 멀티스레드가 아닌 이벤트 모델을 기반으로 일반적인 쓰레드 형태의 제한된 제어 흐름을 구현하는 라이브러리이다. 멀티쓰레드에 비교하면, 이벤트 중심 프로그래밍에서는 쓰레드당 할당할 메모리가 필요 없다. 이벤트 중심 모델은 동기식 처리가 지원되지 않기 때문에 상태머신을 사용해서 높은 수준의 제어흐름을 구현할 때에 단일 이벤트 핸들러로 처리하기 힘들다. 또한 이벤트 중심 모델에서 상태머신의 제어흐름을 관리하는게 어렵다. 이로인해 버그가 발생하고 에러발생 가능성이 높아지게 된다. protothreads는 이런 이벤트 중심 프로그래밍의 복잡도로 인한 에러 발생 가능을 쓰레드 형태의 제어 흐름을 구현함으로써 줄이며, 자원을 효율적으로 활용하게 만든다. 이 글은 Protothreads.. 더보기
[c++] 함수자 구현 고찰 들어가기 함수자(Functor)은 함수처럼 동작하는 객체를 말한다. 기존 함수들을 함수자로 만들어서 처리하는 방법을 살펴보려고 한다. Aleksei Trunov님의 글을 정리한 거라서 내용이 누락되거나 잘못 되어 있을 수 있습니다. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 함수자 도입 다음과 같은 형태를 함수자로 처리해보자. void f1(int, int) { ... } struct A { void f2(int, int) { ... } }; struct B { void f3(int, int) { ... } void f4(int, int) const { ... } }; struct C { void operator()(int, int) { ... } };.. 더보기
openssl에서 nonblock socket으로 ssl 연결 최근 대용량 고속 처리가 대두 되면서 비동기 소켓 처리가 많이 늘어나고 있다. 더욱이 최근 보안이 중요해지면서 ssl에 의한 암호화된 채널 지원도 필요로 하고 있다. 이전에는 단순히 동기 형태의 소켓으로 무리 없이 간단한 통신에서는 문제가 없었지만, 서버에서 대용량 처리가 필요로 하게 되면서 기존 방식으로는 무리가 생기게 된다. 여기서는 비동기로 SSL를 통현 채널을 연결 및 데이터 송수신을 처리하는 간단한 예제를 살펴보겠다. 작성자: http://ospace.tistory.com/,2013.05.07 (ospace114@empal.com) 공통 코드 이 부분은 다음에 나오는 예제에서 사용되는 공통으로 사용되는 코드를 정리해 두었다. 단순히 편하게 사용하게 위해서 급조했기 때문에 혼동의 우려가 있을 수 .. 더보기
데이터 값을 비트 문자열로 변환 프로그래밍 하다보면 간혹 데이터 값을 이진수로 출력하고 싶을 때가 있다. 매번하기에 매우 귀찮은 작업이다. 그래서 간단하게 작성해서 만들어본다. 작성: http://ospace.tistory.com/(ospace114@empal.com) 2009.12.23 코드 단순히 작성한 것이라서 자세한 에러처리는 본인이 직접하길 바란다. 잘못하면 버퍼 오버플로 발생할 수 있다. ^^; enum { BIT_BUF_LEN = 512 }; char* bitToStr(char* val, int len) { static char buf[BIT_BUF_LEN]; int l = 0; int i = 0; memset (buf, 0, BIT_BUF_LEN); #define PRN_BIT(v) (v) ? (buf[l++] = '1'.. 더보기
고급 매크로 기법 Variadic macro 매크로는 작업을 편하게 해주지만, 디버깅하기 매우 힘들게 만드는 양날의 칼과 같습니다. 그래서 가급적 매크로를 사용하지 않고 해결할 수 있으면 그렇게 하는게 좋습니다. C++에서는 모든 작업을 객체로 캐슐화하기에 매크로 사용하지 않아도 작업을 쉽게 사용할 수 있는 경우가 많습니다. 그러나 c인 경우는 그렇지 못한 경우가 많으며 빈번히 매크로를 사용하는 경우가 많습니다. 솔찍히 같은 코드를 반복하는 경우(안좋은 설계)에 매크로로 만들어서 변경되는 부분만 입력해주면 쉽게 작업이 가능합니다. 그래도 가급적 다른 방법을 활용하는게 좋다고 생각합니다. 작성: http://ospace.tistory.com/(ospace114@empal.com) 2012.06.16 Variadic macro 간략한 내용 매크로 중에.. 더보기

반응형