您的位置:首页 > 编程语言 > C语言/C++

用C++实现类似C#属性

2010-01-21 14:08 501 查看
C#属性的功能实际就是实现通过对成员变量的访问,间接调用背后的get,set方法,在C++中可以通过重载操作符实现。

 

代码:

 

/***********************************************************************
// LiFei                                                                    
***********************************************************************/

#ifndef _PROPERTY_H
#define _PROPERTY_H

template <typename T, typename TContainer>
class CProperty
{
public:
    typedef void (TContainer::*NotifyFunction)();
    typedef T ValueType;
    typedef TContainer ContainerType;

public:
    CProperty() : m_value(T()), m_pFunc(0), m_pContainer(0) {}
    explicit CProperty(const T& value) : m_value(value), m_pFunc(0), m_pContainer(0) {}
    explicit CProperty(const T& value, NotifyFunction pFunc) : m_value(value), m_pFunc(pFunc), m_pContainer(0) {}
    explicit CProperty(const T& value, NotifyFunction pFunc, TContainer* pContainer) : m_value(value), m_pFunc(pFunc), m_pContainer(pContainer) {}

 T& operator = (const T& value)
 {
    m_value = value;
    if (m_pContainer && m_pFunc)
        (m_pContainer->*m_pFunc)();
    return m_value;
 }

    CProperty<T, TContainer>& operator = (const CProperty<T, TContainer>& prop)
    {
        m_value = prop.m_value;
        if (m_pContainer && m_pFunc)
            (m_pContainer->*m_pFunc)();

        return *this;
   }

    operator T&() { return m_value; }
    operator T*() throw() { return &m_value; }

    T& Value() { return m_value; }

 

public:
 void SetNotifyer(TContainer* pContainer, NotifyFunction pFunc)
 {
  m_pContainer = pContainer;
  m_pFunc = pFunc;
    }

private:
    T m_value;
    NotifyFunction m_pFunc;
    TContainer* m_pContainer;
};

//////////////////////////////////////////////////////////////////////////

#endif

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# c++ c