c++11
-
[c++] 람다 캡쳐를 잘못 사용했다.프로그래밍/의문 2014. 7. 10. 03:07
Socket* socket = queue_.front(); impl_.async_accept(*socket, [&](const ErrorCode& error) // 전부 참조([&])로 했을 때 socket이 쓰레기 값으로 받아졌었다. { if (error) { throw error; } else { accepted_sockets_.push(socket); // 여기서 쓰레기 값이 대입이 됨 } } ); 생각없이 저 코드를 썼다. 당시엔 이상한 점이 없다고 생각했지만 -_-; async 함수가 비동기 함수이다. bind가 된 완료함수가 언제 불릴지 모른다는 말. 따라서 스택에 있던 Socket* socket의 값은 완료함수가 호출된 시점에선 쓰레기 값이 되고, 나는 그걸 참조해서 사용하려 했던 것이다. ..
-
[c++] typedef template<typename T> 템플릿 자료형의 이름 재정의 방법프로그래밍 2014. 7. 2. 20:18
typedef template array buffer 이런걸 하고 싶었는데 typedef와 template가 겹쳐서 컴파일 에러가 났다. 템플릿을 사용하는 자료형(vector, array, list 등등..) 또는 컨테이너는 typedef로 재정의를 할 수 없을까? 검색해보니 나만 저런걸 하고 싶었던 건 아닌 듯... -_- 비슷한 유형의 글이 어마어마하게 검색이 되었다. 하.지.만. c++11에선 저런걸 할 수 있다. 물론, 문법은 조금 다르지만! template using buffer_type = std::array; /// ... buffer_type buffer; // 길이 128의 바이트 타입 배열(버퍼) 템플릿 using 원하는타입명 = 자료형; 이와 같이 하면 된다. 굳.
-
C++11 가변 인자 템플릿의 사용 예프로그래밍/c++ 2014. 6. 29. 14:05
기존 C++에서는 여러개의 인자를 받는 템플릿 함수를 만들때123456789101112131415161718192021222324 void create() { instance = new Type{}; } template void create(T0 arg0) { instance = new Type{ arg0 }; } template void create(T0 arg0, T1 arg1) { instance = new Type{ arg0, arg1 }; } template void create(T0 arg0, T1 arg1, T2 arg2) { instance = new Type{ arg0, arg1, arg2 }; } .. 이런식으로 만드는 경우가 있었다.저런 코드를 C++11부터 추가된 기능인 가변 인자 ..
-
[c++11] std::mutex프로그래밍/c++ 2014. 4. 27. 13:14
쓰레드(thread)를 사용하다보면 하나의 자원에 동시에 접근하는 경우가 있는데, 이를 방지하기 위해 사용하는 표준 라이브러리에서 제공하는 객체(C++11) 헤더 선언 std::mutex mutex; lock() 뮤텍스를 소유를 시도함. 뮤텍스를 소유할 때까지 쓰레드는 대기. unlock() 뮤텍스의 소유권을 놓음. 쓰레드 소유를 대기한(lock을 호출한) 쓰레드가 있다면 소유권은 다른 쓰레드에게 넘어간다. try_lock() bool을 반환. 기존의 lock은 소유권을 받을 때까지 대기에 들어갔다면, 이 함수는 호출 되는 순간 소유권을 얻어내지 못하면 false를 반환. 공유된 자원이 다른 쓰레드에서 사용중이라면(try_lock 반환값이 false라면), 다른 작업을 하는 식으로 사용이 가능. ++ 윈..