一种直接访问C++对象的protected成员的通用方法
来源:互联网 发布:电脑上测试 php网页 编辑:程序博客网 时间:2024/06/06 04:37
Motivation:
通过一个C++对象的指针直接访问该对象的protected成员变量,无需修改该类的实现,这是我们使用第三方C++类库时常见的需求。
My Approch:
#define PROTECTED_CAST_DECL (CLASS_TYPE ,MEMBER_TYPE ,MEMBER_NAME) /
template <typenameClassType , typenameMemberType > /
class C ##MEMBER_NAME ##Accessor /
{ /
class CAccessor: public ClassType /
{ /
friend class C ##MEMBER_NAME##Accessor; /
}; /
public: /
static MemberType& GetMember (ClassType* pClass) /
{ /
return ((CAccessor*)pClass )->MEMBER_NAME; /
} /
};
#define PROTECTED_CAST (CLASS_TYPE ,CLASS_OBJECT_PTR ,MEMBER_TYPE,MEMBER_NAME ) (C##MEMBER_NAME ##Accessor<CLASS_TYPE , MEMBER_TYPE>::GetMember (CLASS_OBJECT_PTR))
Sample:
以下示例代码展示了PROTECTED_CAST的使用方法,代码在VC++ 2008下测试通过。
class CPrivateMemberWrapper
{
protected :
int m_iValue ;
double m_dValue ;
string m_sValue;
public :
CPrivateMemberWrapper (inti , double d , const char * lps ):
m_iValue (i), m_dValue (d), m_sValue (lps)
{}
~CPrivateMemberWrapper () {}
};
PROTECTED_CAST_DECL (CPrivateMemberWrapper, int , m_iValue)
PROTECTED_CAST_DECL (CPrivateMemberWrapper, double , m_dValue)
PROTECTED_CAST_DECL (CPrivateMemberWrapper, string , m_sValue)
int _tmain (int argc, _TCHAR * argv[])
{
CPrivateMemberWrapper Wrapper(1979, 3.14, "CPrivateMemberWrapper");
cout << PROTECTED_CAST(CPrivateMemberWrapper , &Wrapper , int , m_iValue ) << endl;
cout << PROTECTED_CAST(CPrivateMemberWrapper , &Wrapper , double ,m_dValue ) << endl;
cout << PROTECTED_CAST(CPrivateMemberWrapper , &Wrapper , string, m_sValue ) << endl ;
return 0;
}
- 一种直接访问C++对象的protected成员的通用方法
- 一种通用的数据访问对象模式
- 一种通用的DAO访问方法
- C++派生类对象访问基类的protected成员
- C++派生类对象访问基类的protected成员
- C++派生类对象访问基类的protected成员
- 3.3对象成员的访问【C++】
- 基类的protected成员变量只能被子类继承,在基类之外都不能直接访问基类protected成员变量
- derived类对象能访问的protected成员属于是自个的基类部分的
- 一种在线程函数里面访问类成员的方法
- 神奇的虚函数:用基类指针访问对象的protected成员函数
- 从“派生类不能访问基类对象的protected成员”开始讨论各类成员的“可见性”
- C++在类的成员函数中,允许直接访问该类的成员对象的私有成员变量
- C++在类的成员函数中,允许直接访问该类的成员对象的私有成员变量
- 一种通用的C++类或者结构成员变量的初始化方法
- c++ 类成员的访问权限priavte, protected, public
- C++中 public protected private 类成员的访问
- C++中 public protected private 类成员的访问
- 水晶報表直接打印到指定打印機(Crystal Report Direct Print )
- 睡5分钟等于6个钟头的方法
- java常考的几个排序
- 数据表的设计
- Windows经典菜单框
- 一种直接访问C++对象的protected成员的通用方法
- Visual C++集成开发环境创建 C语言工程与调试入门
- 急急急!!!!怎么下载一个指定DIV里面的图片到本地呀!!!!!!!!!!!!!!
- 页面置换算法(FIFO,LRU,最佳,Clock)
- 几种读取属性文件的JAVA实现方式
- DataGridView隔行显示不同的颜色
- 严格的三级联动日期下拉菜单
- 个人知识管理的29个原则
- 分享:MagicBox - 展示一组图片的新控件