이번 항목은 typename 에 대해서다, 그냥 알고만 있어도 바로 써먹을 수 있으니, 빠르게 정리하고 넘어가도록 한다. 1. typename의 역활은 무엇인가? ① typename은 템플릿 매개변수의 이름을 정할 때, 사용 된다. ② typename은 템플릿 매개변수로 인한 의존적인 타입을 타입으로 사용할 때, 사용 된다. ① 은 쉽게 이해 하겠지만, ②은 가물 가물 할것이다. 질문 2에서 예제와 함게 설명 한다. 2. 아래 코드의 문제점은 무엇인가? template class X_base { public: typedef T instantaited_type; }; template class X : public X_base { public: bool operator() ( const instantaite..
More Exceptional C++ 검색 결과
어떤 기능,역활, 상태를 클래스에 부여하기 위해서, 상속이나 특성 클래스를 사용 한다. 이러한 클래스들에 제약을 두어서, 원하는 클래스만이 사용될 수 있게 하는 기술에 대한 이야기가 바로 항목 4이다. 이야기를 하기 위해서 5가지의 질문에 답해보고 생각해 보기 바란다고, 책에선 설명하고 있다. 1. 특성 클래스(traits class)의 정의는? C++98 17.1.18에서, 클래스 템플릿과 함수 템플릿이 받아들이는 타입을 조작하기 위해, 필요한 타입과 함수의 집합을 포함하는 클래스라고 규정했다. 예를 들면, iterator_traits 도 있고, not1에 넣을때 .. 몇몇 특성 클래스도 있고. 잘 사용하지 않아서 예는 잘 못들겠네; 2. 아래 클래스 템플릿이 있다. 템플릿 매개변수가 T* Clone(..
바로 질문으로 들어가자. 1. 판단자(predicate)를 정의하고, STL에서 사용 되는 방법을 예를 들어 설명하라. 판단자(predicate)는 bool 형을 반환하는 함수 오브젝트를 말한다. 예제 코드 #include #include // 판단자(술어구문 클래스) class Predicate { public: bool operator()( int val ) { return val > 1; } }; int main( void ) { std::vector testvector; testvector.push_back( 1 ); testvector.push_back( 1 ); testvector.push_back( 2 ); testvector.push_back( 2 ); testvector.push_back..
판단자라 불리는 이것은 predicate 를 말하는 것이다. 이 predicate 는 저번에도 언급했드시 술어 구문 함수 오브젝트로 쉽게 생각해 클래스(구조체)의 bool operator()( T ) 을 정의하여, 함수 오브젝트로 사용 하는 객체를 가리킨다. 자세한 내용은 http://ikpil.com/608 을 참고. 1. std::remove() 알고리즘이 하는 일을 구체적으로 설명 하라. 참조 : http://ikpil.com/598 2. std::vector에서 3의 값을 갖는 모든 요소를 지우는 코드를 작성 하라. #include #include int main( void ) { std::vector abcdefg; for( int iii = 0; iii < 10000; ++iii ) { abc..
사실 이 항목이 왜 존재 하는지 모르겠다. "왜" 란 느낌이 팍 들게 만들었던 질문과 예제코드를 보자. 첫번째 질문, std::cin과 std::cout 은 무슨 타입인가? 코드로 보는게 더 편하니, 코드 첨부 // char TYPEDEFS typedef basic_ios ios; typedef basic_streambuf streambuf; typedef basic_istream istream; typedef basic_ostream ostream; typedef basic_iostream iostream; typedef basic_stringbuf stringbuf; typedef basic_istringstream istringstream; typedef basic_ostringstream ostr..
2010년쯤 되면, 기본 사양이 쿼드코어 시대를 맞이하게 될 것이다. 이것은 멀티 쓰레드 환경이 얼마나 가까이 왔는지 보여주는 증거이기도 하다. 이런 시대에 맞추어, 프로그래머는 멀티 쓰레드 환경에서 더 빨리 돌아가도록 설계하고 만들어야 할 것이다. 13, 14, 15 항목에서 설정했던 모든 것들이, 멀티 쓰레드에서 어떻게 동작을 하게 될까? ... 쓰레드를 생각하면 복잡해 지는 로직 속에서 우리는 "동기화 객체(Sync Object)"를 만들어서, 각 쓰레드를 동기화 시키려고 할 것이다. 하지만 이 "동기화 객체"를 사용 하면, 적지 않은 비용을 내야 할 것 이다. 이번 항목은 13,14,15 항목에서는 멀티쓰레드 환경에서의 최적화로 String 클래스를 정의 하는 방법을 이야기 한다. 시작 부터 말하..
최근댓글