class manager : public observer, observer
Чтобы быть действительным, класс manager должен реализовать Update функцию для каждого типа событий, но что я могу сделать, если эти функции можно написать по шаблону?
Итак, вместо:
class manager : public observer, observer {
void Update(const eventA& ) { /* do something */ }
void Update(const eventB& ) { /* do something */ }
}
При использовании такого шаблона могут возникнуть ошибки:
template void Update(const T&) { /* do something */}
Я реализовал кое-что на основе:
- функции шаблона с именем update_internal
- и макрос для создания различных «реальных» реализаций для всех типов.
class manager : public observer, observer {
template void Update_Internal(const T&) { /* do something */}
#define GEN(TYPE) void Update(TYPE a) { Update_Internal(a); }
GEN(eventA);
GEN(eventB);
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... a-template