Если два класса имеют одинаковый набор методов, это еще не значит, что мы сможем привести их к одному типу. А ведь именно к этому приведет использование шаблона.
Вот тут ты не прав. Ни чего не к какому типу приводить не надо.
Достататочно, то что набор методов и сигнатур(и не явных приведений приводящим к схожим сигнатурам) будет совпадать.
И то нужны только те методы, которые будут реально использованы.
Т.е. если инстанцирую шаблон класса A передавая в качестве аргумента класс B с усеченным интерфейсом(нехватаем методов), но не вызываю в коде методов класса A использующие недостающие методы B то код будет прекрасно работать (Николай Джосатис "Шаблоны C++")
template<class data>
class processdata
{
public:
template <class indata, class outdata>
bool doNext(indata i, outdata o)
{
data d;
bool bEof = false;
bEof = i.get(d);
// что-то делаем
o.put(d);
return bEof
}
}
я могу прекрасно этот код использовать в тестах отдавая заклушки в indata и outdata