Как вы заставляете шаблонизацию соответствовать базовому классу?

У меня есть функция шаблона, который явно создан для Base класс, но не для Derived учебный класс. Как я могу заставить использования, которые передают Derived класс (или другие производные классы) для сопоставления с Base учебный класс?

Заголовочный файл:

class Base {
};
class Derived : public Base {
};
class Derived2 : public Base {
};

template <typename Example> void function(Example &arg);

Файл реализации:

// Explicitly instantiate Base class:
template void function<Base>(Base &arg);

// Define the template function:
template <typename Example> void function(Example &arg) {
// Do something.
}

Потому что у меня нет явно созданной функции для Derived или же Derived2Я получаю неопределенные ссылки, однако я хотел бы связать с Base класс, который явно определен.

Как я могу заставить шаблон преобразоваться в базовый класс для всех объектов, полученных из Base с использованием C ++ — 03?

Могу ли я сделать это как-то со специализацией Derived класс к Base определение класса?

0

Решение

Как насчет:

template <> void function(Derived &arg)
{
function<Base>( arg );
}

РЕДАКТИРОВАТЬ: Вы также можете сделать это с перегрузкой функции, как aschepler предложил:

void function(Derived &arg)
{
function<Base>( arg );
}

Концептуально то же самое, хотя, я согласен, немного лучше 🙂

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]