- У меня есть класс шаблона A и функция оператора потока для A, которая, следовательно, является функцией шаблона.
- У меня есть класс B, который наследуется от A, указывая тип для шаблона идобавив некоторые вещи, специфичные для B.
- Я пишу оператор потока на B, который делает что-то специфическое для B, а затем возвращается к остальным операциям потока, запрограммированным для A.
Поскольку B является подклассом A (вы называете это так?), Вызов потокового оператора A должен работать.На самом деле operator>>(f,a)
в main () работает.Но по какой-то причине он не работает на b, приведенном к A. Я получаю сообщение об ошибке: «нет соответствующей функции для вызова оператора operator >> (std :: basic_istream> &, A)».
Чтоя делаю не так?
Вот пример кода:
#include <stdlib.h>
#include <fstream>
#include <iostream>
using namespace std;
template <class TypeT>
class A
{
public:
A(){a = -9;}
A(TypeT v){a = v;}
TypeT a;
};
class B : public A<int>
{
public:
B(int w) : A<int>(10) {b = w;}
int b;
};
template <class TypeT>
istream &operator>> (istream &s, A<TypeT> &a)
{
cout << "a.a = " << a.a << endl;
return s;
}
istream &operator>> (istream &s, B &b)
{
cout << "b.b = " << b.b << " ";
operator>>( s, (A<int>)b); // error!
return s;
}
int main(void) {
ifstream f("/dev/null");
A<int> a(0);
operator>>( f, a );
B b(1);
operator>>( f, b );
return EXIT_SUCCESS;
}
.