C++ 템플릿 샘플...
글쓴이: namacin / 작성시간: 금, 2005/10/07 - 9:37오전
C++을 공부중입니다. 간단한 템플릿 예제를 만들어 봤는데
컴파일과 동작은 이상이 없습니다만..
제대로 이해를 하고 만든건지 조언을 듣고 싶어서요
고수님들이 보고 어떠한 문제 점이 있는지 지적을 해주시면 고맙겠습니다. 꾸벅~
#include <iostream>
using std::cout;
using std::endl;
//----------------------------------------------------------------
template <typename C>
class classData
{
public:
virtual void func( void ) = 0;
};
//----------------------------------------------------------------
template <typename C>
class classA : public classData<C>
{
private:
int a;
public:
classA( int z ){ a = z; };
// void func( void ) { a++; cout << a << endl; };
void func( void );
};
//----------------------------------------------------------------
template <typename C>
void classA<C>::func( void )
{
a++;
cout << a << endl;
}
//----------------------------------------------------------------
template <typename C>
class classB : public classData<C>
{
private:
C b;
public:
classB( C z ){ b = z; };
void func( void ) { };
};
//----------------------------------------------------------------
template <typename C>
class classC : public classData<C>
{
private:
C c;
public:
classC( C z ){ c = z; };
void func( void ) { c += 10; cout << c << endl; };
};
//----------------------------------------------------------------
template <typename C>
class Test
{
public:
void func( C *t )
{
t->func( );
};
};
//----------------------------------------------------------------
int main( void )
{
classA<int> a(10);
classB<int> c(20);
classC<int> b(40); // func()을 사용하지 않더라도 based 클래스에 virtual로
// 선언되어 있으므로 dummy 펑션으로 func()을 만들어
// 주어야 한다.
// int d = 100;
Test< classData<int> > t; // Test 클래스에서 사용하는 자료형이
// classData<> 형 템플릿이다.
t.func( &a );
t.func( &b );
t.func( &c );
// t.func( &d ); // t의 자료형과 매칭시킬수 없어서 컴파일 에러
return 0;
}
Forums:


Re: C++ 템플릿 샘플...
제가 남 code 를 봐줄 주제는 못됩니다만,
Test::func() 함수의 매개변수는
classData 형이 와야만 하니까
아래처럼 바꾸시는게 더 맞지 않을까 싶네요.
//---------------------------------------------------------------- template <typename C> class classData { public: virtual void func( void ) = 0; }; //---------------------------------------------------------------- template <typename C> class Test { public: void func( classData<C> *t ) { t->func( ); }; };개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
답변 감사합니다.지금 막 보고 수정해 돌려 봤는데 컴파일에서 에러가
답변 감사합니다.
지금 막 보고 수정해 돌려 봤는데 컴파일에서 에러가 나네요
생각해보니까 main()에서
와 같이 선언을 했으니까 Test class의 C 자체가 classData<C> 가 되는것이 아닌가 싶습니다.
어찌됐건 답변 감사합니다. 꾸벅~
템플릿이란 놈.. 개념상으로는 별거 아닌거 같았는데
막상 써먹어 보려니까 이것저것 생각해야할게 많네요..
C++ 너무 어렵습니다.. ㅠ.ㅠ
[quote="namacin"]생각해보니까 main()에서 [co
그렇습니다. 따라서 수정한 코드에서는 Test<int> t 로 써야지요.
좀 더 유연하게 만들기 위해 template template parameter와
template member function을 쓰는 방법도 있습니다.
template <template <typename> class C> class Test { public: template<typename T> void func( C<T> *t ) { t->func( ); }; }; //---------------------------------------------------------------- int main( void ) { classA<char> a(10); classB<int> c(20); classC<long> b(40); Test< classData > t; t.func( &a ); t.func( &b ); t.func( &c ); return 0; }좋은 답변들 감사드립니다.제가 가지고 있는 책에는 이런 내용들이
좋은 답변들 감사드립니다.
제가 가지고 있는 책에는 이런 내용들이 없었는데..
난이도를 조금 높여서 다른 책을 사서 봐야겠네요
괜찮은 책 좀 추천해주시겠습니까?
너무 이론적인 책은 cpu 사양이 떨어지는 탓인지 잘 이해가 안되더라구요.
손으로 이해할 수 있는 책이면 좋을것 같습니다.
꾸벅~
[list][*]Bjarne Stroustrup, The C++ Pr
- Bjarne Stroustrup, The C++ Programming Language
본문과 부록의 템플릿 부분만 이해하면 실무에서 부족함을 느낄 일은 별로 없습니다.
- D. Vandevoorde & N. Josuttis, C++ Templates: The Complete Guide
제목 그대로 템플릿에 대해서만 다룹니다. 상당히 깊은 부분까지 다루고 있기에
[/]게다가 C++의 바이블로 통하는 책이니 사두면 손해볼 일은 없을 겁니다.
내용은 어려운 편입니다. 저도 지금 이 책을 보고 있는데 진도가 무척 느립니다. --;
댓글 달기