Столкнулся со следущей проблемой:
template<typename _Tp>
class aa
{
_Tp* _d;
public:
aa& operator= (_Tp* d) { _d=d; return *this; }
};
class bb : public aa<int>
{
};
int main ()
{
aa<int> a;
bb b;
int val = 5;
a = &val;
b = &val;
}
Компилятор на строке "b = &val;" естественно выдает ошибку "Could not find a match for 'bb::operator =(int *)' in function main()". Объяснение этому факту в стандарте (если я ошибаюсь — поправьте):
13.5.3 Assignment [over.ass]
1 An assignment operator shall be implemented by a non-static member
function with exactly one parameter. Because a copy assignment opera-
tor operator= is implicitly declared for a class if not declared by
the user (_class.copy_), a base class assignment operator is always
hidden by the copy assignment operator of the derived class.
Вопрос: Как это обойти? Т.е. хочется определить в базовом классе оператор присваивания, а во всех дочерних им пользоваться.
Вариант
typedef aa<int> bb;
не подходит, т.к. bb может содержать дополнительные методы.
Заранее спасибо!