1

これはかなり奇妙な質問ですが、ネストされたクラスを使用して、C++ でプロパティのような機能を作成しています。また、ネストされたクラスの代入演算子を保護し、ホスト クラスをネストされたクラスの a にすることで、これらを ReadOnly として機能させましたFriend。残念ながら、継承クラス ( with : 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';}
};

Type = 'A' でエラーが発生する

4

2 に答える 2

6

親しみやすさは遺伝しません。

最善の解決策が何であるかは明らかではありません。おそらく、基本クラスの保護されたセクションでネストされたクラスを宣言し、そのメンバーを公開しますか? そうすれば、友情は必要ありませんが、クラス階層の外からのものはそれをいじることができなくなります.

于 2013-01-07T01:34:25.013 に答える
0

また、フレンド宣言をどのセクションに入れるかは問題ではありません。

おそらく代わりに、内部クラスを保護されたセクションに置き、そのインターフェイスをパブリックにします。

于 2013-01-07T01:42:54.073 に答える