프로그래밍/c++
-
boost::uuids::uuid를 std::unordered_map과 사용하기프로그래밍/c++ 2015. 11. 5. 02:55
uuid(universal unique identifier)는 객체의 식별 등에 사용되는 고유한 식별자이다. 식별을 위한 정수 값 0, 1, 2 등의 것을 심화시킨 것이라고 생각해도 무관. 자세한 설명은 http://terms.naver.com/entry.nhn?docId=850737&cid=42346&categoryId=42346 12345678910111213141516171819#pragma warning(disable : 4996) #include #include #include using uuid_hasher = boost::hash;/* c++11 이하 버전에선 typedef boost::hash uuid_hasher*/ int main(){ std::unordered_map uuidmap; ..
-
다양한 데이터 타입의 변수. boost::variant프로그래밍/c++ 2015. 11. 2. 11:12
boost::variant는 템플릿 파라미터로 명시된 타입들 중 하나를 데이터로 가질 수 있는 클래스이다.한마디로 업그레이드 된 union. 힙을 사용하지도 않고, RTTI도 이용하지 않아 좋은 성능을 보여준다. 간단한 사용 예 boost::variant var; // int, std::string, float 타입들을 담을 수 있는 변수. var = "Hello";var = 0;var = 1.0f; 값을 읽어오는 방법 template boost::get 를 사용한다. 잘못된 변환을 하려고 한다면? boost::bad_get 예외를 던진다. boost::get(var); // std::string 타입으로 읽는다.boost::get(var); // 잘못된 코드! boost::bad_get 예외가 발생한다..
-
std::bind 사용 예제프로그래밍/c++ 2015. 10. 25. 21:53
0. 반환/인자 없는 함수 바인드 123456void do_something(){ // do something...} std::function func = std::bind(do_something);cs 1. 반환 있고 인자 없는 함수 바인드 1234567int do_something(){ // do something... return 0;} std::function func = std::bind(do_something); // // function의 템플릿 부분을 int()cs 2. 반환 있고 인자 받는 함수 바인드 1234567int do_something(int value){ // do something... return value;} std::function func = std::bind(do_s..
-
unique_ptr 캐스팅 std::unique_ptr<Derived> => std::unique_ptr<Base>프로그래밍/c++ 2015. 10. 18. 15:51
이런걸 하고싶었다.12 unique_ptr baseptr = std::make_unique();cs 근데 저렇게 대입은 안 되더라. 하지만 이렇게 하면 된다. 12345 unique_ptr dervptr = std::make_unique(); unique_ptr base = std::move(dervptr); Colored by Color Scriptercs 깔끔 ㅎㅎ
-
C++11 람다를 보다 깔끔하게 쓰는 방법프로그래밍/c++ 2015. 9. 19. 22:45
1234567891011 // 비동기 송신을 등록합니다. socket.async_send(buffer(sendChunk, sendBytes), strand.wrap( [this, buffer = std::move(sendBuffer)](const auto& error, size_t bytes) // 람다 {// 완료 함수 if (error) {// 오류를 알린다. this->on_error(error); } } // 람다 끝 ));Colored by Color Scriptercs Vs2015에서 람다를 써서 비동기 핸들러를 설정하는데 코드가 지저분하게 느껴졌다. {}과()이 겹쳐지면서 어디까지가 무슨 코드고 이런 거 구분이 뚜렷하지가 않게 느껴지더라.어떻게하면 보다 깔끔하게 보일까를 생각했는데 람다를 변..
-
boost::system::error_code를 std::error_code로 바꿔주기프로그래밍/c++ 2015. 7. 26. 14:07
12345678910111213#include #include // ... boost::system::error_code error; std::error_code stderror{ error.value(), (std::error_category&)error.category() }; // ... auto errormsg = error.category().message(error.value();auto stderrormsg = stderror.category().message(stderrormsg.value());cs 결과
-
[c++11] std::weak_ptr의 사용프로그래밍/c++ 2015. 7. 23. 12:30
weak_ptr약한 포인터(weak pointer)에 관한 설명으로 흔히 사용되는 말은 shared_ptr로 연결된 자료구조의 포인터 참조 고리를 끊기 위해서라는 것이다. 나는 weak_ptr를 다음과 같이 설명하는 편이 더 나을 것이라고 생각한다.포인터가 존재할 경우에만 참조해야 하고(다른 누군가에 의해) 삭제될 수 있으며마지막으로 사용된 후에는 소멸자가 호출되어야 하는(그래서 자신이 할당했던 익명 메모리 공간을 제거해야만 하는) 포인터고전 게임인 "행성 게임(asteroid game)"을 구현해야 한다고 생각해 보자. 모든 행성은 게임에 의해 관리되지만 행성 사이의 충돌을 처리하기 위해서 이웃 행성 정보도 관리해야 한다. 행성이 충돌하면 보통 하나 이상의 행성이 소멸된다. 이러한 이웃 행성 목록을 관..
-
c++11에 추가된 override 키워드와 필요성프로그래밍/c++ 2015. 7. 13. 00:13
Session을 상속받는 MySession이라는 클래스가 있다고 하자. MySession 클래스는 Session의 OnReceive 함수를 재정의 하려고 했다. 1234567class MySession : public Session{public: virtual void OnReceive() { }};cs 하지만 Session의 OnReceive의 정의는 이와 달랐다. 1234567class Session{public: virtual void OnReceive(const void* buffer, size_t bytes) { }};Colored by Color Scriptercs 이 경우 OnReceive는 Session의 OnReceive 재정의가 아닌, MySession 클래스에서 새롭게 정의된 가상함수..