У меня есть код, как показано ниже. У меня есть абстрактный шаблонный класс Foo и два подкласса (Foo1 и Foo2), которые берутся из экземпляров шаблона. Я хочу использовать указатели в своей программе, которые могут указывать на объекты типа Foo1 или Foo2, поэтому я создал интерфейс IFoo.Создание интерфейса для шаблона абстрактного класса в C++
Моя проблема заключается в том, что я не уверен, как включить функционал в интерфейс, поскольку он зависит от экземпляра шаблона. Возможно ли даже сделать доступным функцию через интерфейс, или я пытаюсь сделать невозможное?
Большое спасибо за помощь.
class IFoo {
public:
virtual functionA()=0;
};
template<class T>
class Foo : public IFoo{
public:
functionA(){ do something; };
functionB(T arg){ do something; };
};
class Foo1 : public Foo<int>{
...
};
class Foo2 : public Foo<double>{
...
};
Но технически я не буду создавать экземпляр IFoo, Я только хочу создать экземпляр Foo1 (или 2) (на который указывает указатель IFoo), и я предположил, что соответствующая функция может быть найдена путем динамического ограничения? – bishboshbash
@bishboshbash: для функции, которую можно найти с помощью динамической привязки, должны быть известны все типы аргументов; иначе было бы непонятно, что искать, если вы использовали перегруженные функции. – liori
Думаю, я понимаю. Если я создал экземпляр Foo1 и вызвал Foo1.functionB (..), он будет работать нормально, поскольку шаблон был создан. Могу ли я создать абстрактный класс, чтобы указать на объекты типа Foo1 или Foo2 на множественное наследование и, следовательно, избежать проблемы динамического связывания, пытающегося пройти через незакрепленный шаблон? – bishboshbash