Можно ли передать шаблон в функцию без указания конкретного типа?
У меня есть базовый класс, который является шаблоном, и две его специализации. Вот пример базового класса:
template<typename T1, typename T2> class Dataset
{
protected:
std::vector<std::pair<T1, T2> > _data_buffer;
public:
virtual void doSomething(MatrixRm& data) = 0;
}
Вот первый класс, который расширяет базовый класс:
class InMemoryDataset : public Dataset<MatrixRm, MatrixRm>
{
public:
void doSomething(MatrixRm& data) override
{
...
}
}
А вот второй класс, который расширяет базовый класс:
class OnlineDataset : public Dataset<std::string, std::string>
{
public:
void doSomething(MatrixRm& data) override
{
...
}
}
Теперь я хотел бы передать любой из этих классов в функцию или конструктор другого класса. Но в настоящее время я не могу понять, как это сделать, не указав конкретный тип.
Вот как я это себе представляю:
void someFunction(Dataset* dataset)
{
//do something with the specialization
}
В Visual Studio появляется следующее сообщение об ошибке:
отсутствует список аргументов для шаблона класса «Набор данных»
Мне имеет смысл, почему это не разрешено, но есть ли способ обойти это?