책의 예제를 쳤는데.. 이해가 안가기도 하고 에러가 나기도하고.
글쓴이: 찬밥 / 작성시간: 목, 2004/09/02 - 9:40오후
오타는 없어 보이는데.. 실행이 안되내요..
문법도 쫌 이해가 안되고..
tempparm.cpp
#include <iostream> using namespace std; #include "stacktp.h" template <template <typename T> class Thing> class Crab { private: Thing<int> s1; Thing<double> s2; public: Crab() {} bool push(int a, double x) { return s1.push(a) && s2.push(x); } bool pop(int & a, double & x) { return s1.pop(a) && s2.pop(x); } }; int main() { Crab<Stack> nebula; int ni; double nb; while (cin >> ni >> nb && ni > 0 && nb > 0) { if(!nebula.push(ni, nb)) break; } while(nebula.pop(ni, nb)) cout << ni << ", " << nb << endl; cout << "프로그램을 종료합니다.\n"; return 0; }
stacktp.h
#ifndef STACKTP_H_ #define STACKTP_H_ template <class Type> class Stack { private: enum { MAX = 10}; Type items[MAX]; int top; public: Stack(); bool isempty() const; bool isfull() const; bool push(const Type & item); bool pop(Type & item); }; template <class Type> Stack<Type>::Stack() { top = 0; } template <class Type> bool Stack<Type>::isempty() const { return top == 0; } template <class Type> bool Stack<Type>::isfull() const { return top == MAX; } template <class Type> bool Stack<Type>::push(const Type & item) { if (top < MAX) { items[top++] = item; return true; } else return false; } template <class Type> bool Stack<Type>::pop(Type & item) { if (top > 0) { item = items[--top]; return true; } else return false; } #endif
tempparm.cpp 중에서
템플릿 나오는 부분이요..
template <template <typename T> class Thing>
이 부분 이해가 안가는데요?
뭔뜻일까요??
또.. 템플릿 얘기 이해가 ㅡ_ㅡ;; 책을 여러번 읽는 편이 좋을까요.. 이거참...
책만 봐서는 도대체 뭔소린지 -_-;
Forums:
template <class Thing> class Crab;
template <class Thing> class Crab;
이건 무슨 뜻인지 아시죠? Crab은 클래스 템플릿인데 type parameter로
쓰이는 Thing은 어떤 형을 나타내는 이름입니다. 이러면 Crab<int>,
Crab<int*>, 심지어는 Crab< Crab<int> > 로도 쓰일 수 있습니다.
template <template <typename T> class Thing>
class Crab;
이것은 type parameter인 Thing 자체가 type parameter 하나만을
갖는 템플릿 클래스여야 함을 뜻합니다. 말이 좀 복잡하죠? :)
따라서
가 됩니다.
댓글 달기