전체 글142 Modern Effective C++ Item 33 : 람다 forwarding엔 decltype 람다에서 std::forward 인자는 decltypec++14람다에서 가장 신통한 것은 바로 인자로 auto를 받는 generic lamdas이다. 람다에서 인자를 auto로 받는다는 것은 람다로 부터 나온 closure 클래스의 opearator( )가 템플릿이 된다고 볼 수 있다. 예를 들어 이런 auto를 인자로 받는 람다를 보자.auto f = [](auto x){ return func(normalize(x));};이 람다로 부터 나온 클로저 클래스는 다음과 같이 생겼다.class SomeCompilerGeneratedClassName{ public: template auto operator( )(T x) const { return func(normalize(x)); } ... }위 예제에서 람.. 2015. 5. 19. Logging Logging우리들은 자주 로그를 찍는다, 또는 찍어라 하고 말한다. 로그를 찍는것은 시스템의 상황을 외부 저장소에 기록하는 것을 의미한다. 약속된 특정 조건에서 약속된 내용을 저장하여 문제나 운영 상황을 파악하기 쉽게 만들어 주는 역할을 한다. 앞서 말한 dump도 로그의 일종이라고 생각한다.Log Library로그를 찍어야한다. 처음 생각하기 쉬운 방법은 fprintf등으로 파일에 출력하기이다. 직접 정보를 쉽게 다룰 수 있다는 점은 좋다. 하지만 로그 파일을 안정적으로 다루는 것은 또 다른 문제이다. 추가로 동기적 I/O 형태의 호출이므로 성능이슈도 뒷따른다. 혹여 멀티쓰레드 프로그래밍을 해야된다면, fprintf를 쓸 마음이 점점 사라지게 될 것이다.그리고 일반적으로 로깅을 할 때 하나의 자료에만.. 2015. 5. 16. Exception Filter Exception FilterException이란 내 생각엔 버그다. 프로세스가 정상적인 동작을 할 수 없을 때, 예외 이벤트가 발생하여 운영체제에서 프로세스를 강제 종료시켜버린다. 좀 규모가 있는 프로그램을 만들어서 돌리다보면 (거의 대부분의 나의 코드에서) 예상치못한 Exception이 발생한다. 디버그 모드에서 테스트할때는 괜찮았는데, 리얼로 배포해서 돌리다보면 생각지도 못한 곳에서 예외가 발생하기도 한다. 예외를 깔끔히 처리하는 것은 안전한 코드를 생산적으로 처리하는데 도움이 된다.SEHWindows에서는 이 예외처리를 잘 할 수 있게 SEH라는 구조를 제공한다. 자세한 내용을 여기서 다루지는 않을 예정이다. 간단하게 설명하자면 정상적인 실행코드가 담기는 __try블록과, 종료처리 또는 예외 처리.. 2015. 5. 15. Modern Effective C++ item 29 : move가 항상 좋다는 편견은 버려 move가 항상좋다는 편견은 버리자move sementic은 C++11에 등장한 큼지막한 변화의 한 축이다. 임시 객체에 대해서 Copy대신 Move를 하면 정말 번개같은 속도로 같은 기능을 대체할 수 있다고 들었던거같다. 정말로 마법같은 move의 훌륭함을 우리는 마음깊이 새기고 있었다. 하.지.만 이제는 그런 환상을 깰 시점이 온 것같다.move sementic을 지원하지 않는 경우C++ 98에 작성한 legacy 클래스들은 별도의 move 연산자들을 작성하지 않았기 때문에 move sementic으로 받아온다고 해도 별 이득을 볼수가 없다. item 27에서 보았던 move의 까다로운 자동생성조건을 생각해본다면, move 생성자 자체가 없을 가능성이 크고, 그렇다면 그냥 copy연산이 수행되기 때문.. 2015. 5. 13. 이전 1 ··· 21 22 23 24 25 26 27 ··· 36 다음