Вы задаете вопрос, который совершенно не связан с кодом и ошибкой, которую вы включили.
Чтобы функция взяла A
или класс, производный от A
, все, что ей нужно сделать, это взять указатель или ссылку на A
, например,
someFunc(A* pObj, bool someOtherArg);
или
someFunc(A& obj, bool someOtherArg);
Это будет работать в силу наследования. В этом вся суть получения классов друг от друга. Как вы написали его с помощью шаблонов, он будет работать с любым классом, который определяет три метода, которые вы используете, независимо от того, получен он из A
.
Теперь опубликованная вами ошибка не связана с этим вопросом, но причудлива. В написанном вами коде нет ничего плохого, но Visual Studio 6 - древний компилятор; ему двенадцать лет, и он не полностью поддерживает современный стандарт ISO C ++. Эта ошибка может быть артефактом нестандартной реализации шаблонов в компиляторе.