用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
代码:
/***********************************************************************
// 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++11实现类似C#的属性概念设计
- c++实现类似c#事件机制的链接
- C++中实现C#属性相似的语法
- 为C++实现类似C#的import DLL用法
- 在C++中实现类似C#的字符串格式功能
- (原创)一个和c#中Lazy<T>类似的c++ Lazy<T>类的实现
- C++ 实现类似java c#List的方法 boost::any的使用
- 在C++实现C#中的属性(Property)功能的尝试: MACRO篇(1)
- C++实现round四舍五入四位小数,类似C#的round函数
- c#控件实现类似c++中ocx控件功能,Event事件
- C++实现C#的get,set属性操作
- 在C++实现C#中的属性(Property)功能的尝试: MACRO篇(2)
- C#用反射实现两个类的对象之间相同属性的值的复制
- c++&c#实现拼接wav和mp3文件
- 用c++实现类似vb的replace字符串替换
- 粗糙集(Roug Set)属性约简源代码(C/C++实现)Part4 Element.cpp
- [C/C++]属性的秘密——C++仿C#的属性实作
- C++实现类似JAVA的反射 .
- ASP.NET(C#)AJAX+JAVASCRIPT实现类似QQ,MSN窗口之功能(续)