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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值