C++的“友元类”的一个使用场景

我遇到了“必须使用友元类”的一个场景。

我遇到了A中有B,B中有A的场景。

貌似“A的一个函数,作为B的友元函数”这个需求无法被实现。

#include <stdlib.h>
class MyApiCls;
class TcpClientCls//用于和Server通信
{
public:
    TcpClientCls(MyApiCls* pApi) :m_pApi(pApi){}
public:
    void Start(){ HandleUpdateTradingDay("20160308", 9); }//模拟了与Server连接后的情况。
private:
    void HandleUpdateTradingDay(void* pkg, unsigned int len);
private:
    MyApiCls* m_pApi;
};
//inline void TcpClientCls::HandleUpdateTradingDay(void* pkg, unsigned int len)
//{ //放在这里会报错。
//    if (m_pApi)
//        m_pApi->m_tradingDay = atoi(reinterpret_cast<char*>(pkg));
//}
class MyApiCls
{
    friend TcpClientCls;//这个友元函数是必须的。
public:
    MyApiCls() :m_tradingDay(0), m_client(this){}
public:
    void Start(){ m_client.Start(); }
private:
    int m_tradingDay;
    TcpClientCls m_client;
};
inline void TcpClientCls::HandleUpdateTradingDay(void* pkg, unsigned int len)
{
    if (m_pApi)
        m_pApi->m_tradingDay = atoi(reinterpret_cast<char*>(pkg));
    /*如果TcpClientCls引用了MyApiCls,而MyApiCls也引用了TcpClientCls,
    那么,请将它们的"类的声明"和"成员函数的实现"分成".h"和".cpp"文件。
    如果都想写进.h文件中,那么请注意某些(比如这个)函数的实现的位置。
    */
}
int main()
{
    MyApiCls api;
    api.Start();
    return 0;
}
完。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值