Я следующий код (очень упрощенным для ясности):функция член Specialize шаблонного производного класса
class Base
{
virtual int DoStuff(int arg) = 0;
};
template <typename T>
class Derived : public Base
{
int DoStuff(int arg) override
{
// do some stuff
return 0;
}
};
Это прекрасно работает. Теперь я хочу реализовать специальную (векторизованную) реализацию DoStuff. И мне нужно реализация быть конкретными на основе типа T, что производный есть, что-то вроде этого:
class Base
{
virtual int DoStuff(int arg) = 0;
virtual int DoStuffVectorized(int arg) = 0;
};
template <typename T>
class Derived : public Base
{
int DoStuff(int arg) override
{
// do some stuff
return 0;
}
int DoStuffVectorized<char>(int arg) override
{
// do some stuff for T == char
return 0;
}
int DoStuffVectorized<int>(int arg) override
{
// do some stuff for T == int
return 0;
}
};
Однако я не в состоянии сделать эту работу.
EDIT: Я получаю следующее сообщение об ошибке: ошибка C2143: синтаксическая ошибка: отсутствует ';' до «<» на линии int DoStuffVectorized<char>(int arg) override
.
Когда я изменить его на: template<char> int DoStuffVectorized(int arg) override
я получаю: C2898 ошибки: ... ': шаблоны функций член не может быть виртуальной
Любые советы о том, как добиться чего-то вроде этого? Причина, в которой я нуждаюсь, в том, что у меня есть std :: vector, который хранит данные разных типов (используя Derived <>). Таким образом, я могу использовать один и тот же простой код независимо от того, какой тип хранится, и я хочу, чтобы это было правдой даже при использовании специальной векторизованной реализации DoStuff, которая печально специфична для конкретного типа.
Что означает «Я не могу заставить его работать»? –
«Однако я не могу сделать эту работу» Почему? Любые сообщения об ошибках? Что не работает? – user463035818
Добавлены сообщения об ошибках. Мне кажется, что я теряюсь в некоторых синтаксических ошибках определения наследования/шаблона? – PeterK