가정하자 그 청취자를 가정 초를 카운트와 청취자 통지 클래스 SecondTimer
타이머에서 이벤트를 받아 특별한 방법 onTimer()
가 있습니다이해 C++ 템플릿 예
template <class TName>
class SecondTimer
{
public:
SecondTimer() : listener(nullptr), stime(0), time(1000), isStarted(false) {}
void init(TName * _listener, int _stime)
{
GASSERT(_listener && "The listener can not be NULL");
listener = _listener;
stime = _stime;
time = 1000;
isStarted = false;
listener->onTimer(stime);
}
inline void start() { isStarted = true; }
inline void stop() { isStarted = false; }
void Process(int dtime)
{
if (!isStarted)
return;
time -= dtime;
if (time <= 0)
{
int ds = 1 - time/1000;
time = time % 1000 + 1000;
stime -= ds;
listener->onTimer(stime);
//
if (stime <= 0)
{
isStarted = false;
}
}
}
private:
TName * listener;
int stime, time;
bool isStarted;
};
을 내가 1000 템플릿으로 사용할를 onTimer(int)
멤버 함수를 구현하는 다른 클래스
프로그램을 만들 때 실제로 어떻게됩니까? 컴파일러가 모든 1000 가지 클래스에 대해 Init()
및 Process()
함수를 복제합니까?
코드에서 실제로 1000 개의 클래스를 사용하는 경우 예. 또한 클래스 수가 많다면 코드에 실제로 잘못된 것이 있음을 의미합니다. –
@ JaviV : 나는 OP가 1000 번 템플릿을 인스턴스화한다고 생각하지 않습니다. 그들은 단지 요점을 만들고 있습니다 : 컴파일러는이 코드를 gazillion 번 복제합니까? 아니면 똑똑 할 것인가? – rodrigo
제가 아는 바로는, 어떻게 든 일반화 할 수 있다고 확신 할 수 있다는 것입니다. –