Вложенные классы и переполнение стека наследования

это довольно странный вопрос, но я использую вложенные классы для создания функциональности, подобной свойствам, в c ++.
Я также сделал это как ReadOnly, сделав защищенным оператор присваивания вложенного класса, а хост-класс Friend вложенного класса.
К сожалению, кажется, что любой наследующий класс (с : public BaseClass) все еще не может получить доступ к оператору присваивания вложенного класса.

Я не знаю, если это имеет значение, но я поставил Friend в публичной части класса.

Кто-нибудь знает, как я могу это исправить? (или взломать) Спасибо

РЕДАКТИРОВАТЬ: пример кода добавлен

#define ReadOnlyProperty(type,name,parent) \
protected: \
class name : public PropertyBase<type> \
{ \
parent* This; \
public: \
friend class parent; \
name(parent* instance) { This = instance; } \
protected: \
void operator=(type value) {Set(value);} \
void Set(type value); \
type Get() const; \
}; \
public: name name; \
friend class name; \
private:

Базовый класс:

class Object
{
ReadOnlyProperty(char,Type,Object);

public:

Object() : Type(this) {}
};

Наследование класса

class A : public Object
{
public:
A() {Type = 'A';}
};

я получаю сообщение об ошибке типа = ‘A’

1

Решение

Дружелюбие не передается по наследству.

Непонятно, каково лучшее решение; возможно, объявить вложенный класс в защищенном разделе базового класса и сделать его члены публичными? Таким образом, дружба не нужна, но вещи из-за пределов иерархии классов не смогут с этим возиться.

5

Другие решения

и не имеет значения, в каком разделе вы ставите декларацию друга.

возможно, вместо этого поместите внутренний класс в защищенный раздел и сделайте его интерфейсы общедоступными.

0

По вопросам рекламы [email protected]