受保护的“只读”代理类在C ++的原语(Protected “read only” proxy cl

2019-10-21 03:08发布

我最近偶然了这个代理类制造的C ++原始成员“只读”(公开作为常量引用,但私下里非常量)。 这潜在地消除了对样板“干将”。 代理类是这样的:

template <Container,Primitive>
class RO
{
  friend Container;
public:
                           inline operator Primitive() const             { return x; } 
  template<typename Other> inline bool  operator==(const Other& y) const { return x == y; }       
  template<typename Other> inline bool  operator!=(const Other& y) const { return x != y; }       
  template<typename Other> inline bool  operator< (const Other& y) const { return x < y; }        
  template<typename Other> inline bool  operator> (const Other& y) const { return x > y; }        
  template<typename Other> inline bool  operator<=(const Other& y) const { return x <= y; }       
  template<typename Other> inline bool  operator>=(const Other& y) const { return x >= y; }       
  template<typename Other> inline Other operator+ (const Other& y) const { return x + y; }        
  template<typename Other> inline Other operator- (const Other& y) const { return x - y; }
  ... // all other const operator overloads
protected:       
                           inline RO()                                  :x(){ }
  template<typename Other> inline RO(const Other& y)                    :x(y) { }
  template<typename Other> inline Primitive& operator= (const Other& y) { return x = y; }
  template<typename Other> inline Primitive& operator+=(const Other& y) { return x += y; }
  template<typename Other> inline Primitive& operator-=(const Other& y) { return x -= y; }
  template<typename Other> inline Primitive& operator*=(const Other& y) { return x *= y; }
  template<typename Other> inline Primitive& operator/=(const Other& y) { return x /= y; }
  ... // all other non-const operator overloads
                           inline Primitive* ptr()                      { return &x; }
                           inline Primitive& ref()                      { return x; }
                           inline const Primitive* const_ptr() const    { return &x; }
                           inline const Primitive& const_ref() const    { return x; }
  Primitive x;
};

这似乎根据需要,如果我有一个平坦的阶级结构的工作:只是一些class A具有RO代理公司对其只读成员。 但只要我有一些派生class B : public A ,然后我惹上麻烦。 我想有B读取和写入只读 RO的成员在派生类中定义A 。 但看到友谊是不可继承。 我不知道如何去这一点。 同样适用于直接的朋友A :友谊是不可传递。

有没有的“只读”代理这是写朋友和派生类建筑?

文章来源: Protected “read only” proxy class for primitives in c++