我有一个模板基类和一个派生模板类。派生的方法有一个重载方法,其参数包含对基类相同类型对象的引用。如果这些不是模板类,我会让派生类成为基类的朋友,这样我就可以在这种情况下访问基类的受保护成员,但是如何使用模板来做到这一点?
template <typename T>
class base
{
// If this wasn't a template class, I would have done this:
// friend class derived;
public:
base(T val)
: val_(val)
{
}
virtual void assign(const base<T>& other)
{
val_ = other.val_;
}
protected:
T val_;
};
template <typename T>
class derived : public base<T>
{
public:
derived(T val)
: base<T>(val)
{
}
virtual void assign(const base<T>& other)
{
this->val_ = other.val_; // error: ‘int base<int>::val_’ is protected
}
};
int main()
{
derived<int> a(5);
derived<int> b(6);
b.assign(a);
return 0;
}