Да кажем, че имам шаблонен клас:
template <typename T>
class foo {
void do_someting(T obj) {
// do something generic...
}
};
и искам да специализирам do_something, но в него искам да извикам "нормалната" функция do_something:
template<>
void foo<MyObj>::do_something(MyObj obj) {
// do something specific...
// and ALSO do something generic!
}
има ли начин да се препратя към нормалната версия на do_something в моята специализирана функция? Или просто трябва да копирам кода?
(Знам, че мога да преработя foo по такъв начин, че да нямам точно този проблем, но както се случва, не мога наистина да модифицирам „истинското“ foo, тъй като това е силно споделен код.)
do_something
за типаMyObj
- целият ефект от специализацията на шаблона е да замени екземпляра, който бихте получили от основния шаблон, с класа/функцията, които дефинирате в специализацията . - person Steve Jessop   schedule 04.11.2010foo<MyObj>
е клас и има функцияdo_something
и тази функция се дефинира от специализацията. Ако базовият шаблонfoo
беше инстанциран с параметърMyObj
, резултатът би бил друг клас, същоfoo<MyObj>
, който не е разрешен, и това е препятствието. Предполагам, че ако езикът по някакъв начин ви позволи да създадете базовия шаблон с друго име, може да сте добре, но няма такъв късмет. - person Steve Jessop   schedule 04.11.2010