13 Mart 2018 Salı

Unnamed Class

Giriş
Not1 : Bu yazı C'deki Anonymous Structure ile ilgili
Not2 : Bu yazı Nested Class ile ilgili

C#'taki gibi property kodlarımız olsun isteyelim.
public Foo foo { get; private set; }
Unnamed Class
Şöyle yaparız.
struct Foo
{
  class {
    int value;
    public:
      int & operator = (const int &i) { return value = i; }
      operator int () const { return value; }
  } alpha;

  class {
    float value;
    public:
      float & operator = (const float &f) { return value = f; }
      operator float () const { return value; }
  } bravo;
};
Property Template
Okunup yazılabilen propert için şöyle yaparız.
template <typename T>
class Property {
public:
  virtual ~Property() {}
  virtual T & operator = (const T &f) { return value = f; }
  virtual operator T const & () const { return value; }
protected:
  T value;
};
Salt okunur için şöyle yaparız.
template <typename T>
class ReadOnlyProperty {
public:
  virtual ~ReadOnlyProperty() {}
  virtual operator T const & () const { return value; }
protected:
  T value;
};
Alan olarak kullanmak için şöyle yaparız.
Property<float> x;
Sınıfın içinden erişmek için şöyle yaparız.
class Owner {
public:
  class : public ReadOnlyProperty<float> { friend class Owner; } x;
  Owner() { x.value = 8; }
};

Hiç yorum yok:

Yorum Gönder