Предположим, что у меня есть класс 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)
.
Что происходит, когда программа будет построена? Будет ли компилятор дублировать функции Init()
и Process()
для всех 1000 разных классов?
Если ваш код действительно использует эти 1000 классов, да. Кроме того, если у вас есть такое количество классов, это означает, что вы действительно ошибаетесь в своем коде. –
@JaviV: Я не думаю, что OP является actullay, создающим экземпляр шаблона 1000 раз. Они просто делают точку: будет ли компилятор тиражировать этот код в миллион раз? Или это будет умным? – rodrigo
Я знаю, я имею в виду, что я уверен, что в таких случаях можно каким-то образом обобщить. –