Type Traits을 알기 위해, 기본적으로 알아야 하는 것은 무엇인가? 첫 번째, 모든 메타 함수들은 이름 공간 boost 안에 존재하고, #include 규칙을 따른다. 두 번째, 모든 수치 메타 함수들은 편의를 위해 메타 함수안에 ::value 를 제공하한다. 또한 bool을 하나의 정수 식으로 분류되고, bool을 사용 하는 메타함수나 모든 정수 값 메타함수들도 ::value 를 제공한다. 세 번째, 이 MPL이 제대로 동작하기 위해선, 비표준적인 컴파일러 지원을 요구하는 특질들이 있다. 예를 들면 has_trivail_destructor 등이 있겠다. 만약 "비표준적인 컴팡이러의 지원" 하지 않는 경우 MPL의 다른 기능으로 대체되어 사용 되어 질 수 있으니, 너무 걱정하지 않아도 된다. 네 ..
책 정리 검색 결과
Type Traits을 왜 알아야 하는가? C++ Template Metaprogramming 을 하기 위해서는 Template에서 사용 되는 변수들이 무엇인지 알아야 할 것이다. 알다시피 템플릿의 변수들은 타입과, 컴파일 타임에 확인 가능한 상수들이다. 즉, 이러한 변수들을 이용하여, 메타 프로그래밍을 하는 것이다. 이러한 변수들은 더하거나 빼거나, 비교하여, 특정 "연산"을 수행 할 수 있게 되는데, 그것을 "메타 프로그래밍" 이라 부를 수 있다. 이것은 말하는 더하거나 빼거나 등의 "기본 연산"이 있어야 된다는 전제이다. 메타 프로그래밍을 하기 위한 "기본연산"인 Boost 의 MPL 이다. 예를 들자면, "수"를 계산하기 위해선 "계산"이 필요하고, 이 계산의 기본인 "사칙연산"이 있다는 것을 들..
바로 질문으로 들어가자. 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..
최근댓글