none
свойства в Win32/С++ RRS feed

  • Вопрос

  • Мне нужно было промоделировать эффект использования свойств в Win32 С++ или GNU С++. Решил сделать это с помощью шаблона. Получился такой небольшой класс:

    template <class T>
    class Property
    {
      typedef void (*setter_type)(T);
      typedef T (*getter_type)();
    
    
      setter_type setter;
      getter_type getter;
    
    public:
      Property()
      {
        setter = NULL;
        getter = NULL;
      }
    
      Property(setter_type _setter)
      {
        setter = _setter;
        getter = NULL;
      }
    
      Property(getter_type _getter)
      {
        setter = NULL;
        getter = _getter;
      }
    
      Property(setter_type _setter, getter_type _getter)
      {
        setter = _setter;
        getter = _getter;
      }
    
    
      T& operator =(T& obj)
      {
        setter(obj);
        return obj;
      }
    
      operator T ()
      {
        return getter();
      }
    };
    
    Во-первых у меня не получается заставить это работать, а во-вторых я не очень уверен что этот код вообще должен работать, учитывая что я первый раз попробовал написать шаблон, в-третьих я мог напутать с указателями на функцию. Надеюсь, кто-нибудь поможет мне с написанием этого класса и укажет на ошибки. Заранее спасибо
    10 февраля 2011 г. 10:56

Ответы

Все ответы

  • Возможно, я не очень понятно объяснил что конкретно хочу сделать, попробую чуть подробней.

    В C# я могу добавить свойство в класс, используя такую конструкцию:

    private int val;
    
    public Val
    {
       get { return val; }
       set { val = value; }
    }
    

    Нужно промоделировать использование таких свойств в C++, чтобы при получении значения и его присваивании выполнялись какие-то действия. Думаю это может выглядеть примерно так:

    private:
       int val;
       void set_Val(int v) { val = v; return v; }
       int get_Val() { return val; }
    public:
       Property<int> Val(set_Val, get_Val);
    

    А далее так использовать это свойство:

    example x;
    x.Val = 7;
    cout << x.Val;
    
    10 февраля 2011 г. 11:43
  • Возьми готовую реализацию. Например, http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4031
    My blog
    • Помечено в качестве ответа Abolmasov Dmitry 14 февраля 2011 г. 6:54
    10 февраля 2011 г. 14:04
    Модератор
  • На русском языке посмтотрите статью - Свойства в С++.


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 14 февраля 2011 г. 6:54
    10 февраля 2011 г. 15:04
  • В общем я понял в чем была проблема, надо было просто еще сохранять указатель на объект, содержащий свойство, т.к происходил вызов метода, связанного с this, что как раз и создало эту проблему. Теперь буду знать, спасибо за ссылки.
    • Помечено в качестве ответа mtComsCxStart 14 февраля 2011 г. 11:00
    14 февраля 2011 г. 10:59