免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1150 | 回复: 1
打印 上一主题 下一主题

[C++] 看不懂程序。。。C++的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-26 16:53 |只看该作者 |倒序浏览
保险起见,代码全贴上了,有点长。。。
问题是这样的,如果在外部调用PseudoModemDrivers::CreateModem(tty, route, callbackEndPoint),则指向以下代码中PseudoModem *PseudoModemDrivers::CreateModem()的声明。而该CreatModem()方法调用了drivers.CreatePseudoModem(tty, route, callbackEndPoint)
,看有这样一句drivers[numDrivers].CreatePseudoModem = CreatePseudoModem,俺觉得可能就是调用CreatePseudoModem,再往下就不懂了。还有这样的句子: PseudoModem##suffix,两个井号是干什么的阿???
其实按照程序的思路,这里应该继续调用drv_pty.cxx,声成其中定义的PseudoModemPty类。。。可我怎么看也和这个drv_pty.cxx没有联系阿。
小弟本来不懂c++的,老板逼我读这个代码。。。问题问得太弱了大家见谅。


#include <ptlib.h>;
#include "pmodemi.h"
#include "drivers.h"
#include "drv_pty.h"
#include "drv_c0c.h"

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

#define new PNEW

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

static int numDrivers = 0;

///////////////////////////////////////////////////////////////
#define MAX_DRIVERS 10

static struct {
  const char *name;
  BOOL (*CheckTty)(
    const PString &_tty
  );
  PStringArray (*Description)();
  PseudoModem *(*CreatePseudoModem)(
    const PString &tty,
    const PString &route,
    const PNotifier &callbackEndPoint
  );
} drivers[MAX_DRIVERS];

static int addDriver(
  const char *name,
  BOOL (*CheckTty)(
    const PString &_tty
  ),
  PStringArray (*Description)(),
  PseudoModem *(*CreatePseudoModem)(
    const PString &tty,
    const PString &route,
    const PNotifier &callbackEndPoint
  )
)
{
  if (numDrivers >;= MAX_DRIVERS)
    return -1;

  drivers[numDrivers].name = name;
  drivers[numDrivers].CheckTty = CheckTty;
  drivers[numDrivers].Description = Description;
  drivers[numDrivers].CreatePseudoModem = CreatePseudoModem;
  return numDrivers++;
}

///////////////////////////////////////////////////////////////
#define DECLARE_MODEM_DRIVER(name, suffix)                    \
  static PseudoModem *CreatePseudoModem##suffix(              \
      const PString &tty,                                     \
      const PString &route,                                   \
      const PNotifier &callbackEndPoint)                      \
  {                                                           \
    return new                                                \
      PseudoModem##suffix(tty, route, callbackEndPoint);      \
  }                                                           \
  static const int ___addDriver##suffix = addDriver(          \
    name,                                                     \
    &seudoModem##suffix::CheckTty,                           \
    &seudoModem##suffix:escription,                        \
    &CreatePseudoModem##suffix                                \
  );                                                          \

///////////////////////////////////////////////////////////////
#ifdef MODEM_DRIVER_Pty
  DECLARE_MODEM_DRIVER("TY", Pty)
#endif
#ifdef MODEM_DRIVER_C0C
  DECLARE_MODEM_DRIVER("C0C", C0C)
#endif
///////////////////////////////////////////////////////////////
PseudoModem *PseudoModemDrivers::CreateModem(
    const PString &tty,
    const PString &route,
    const PNotifier &callbackEndPoint
)
{
  PseudoModem *modem = NULL;

  for (int i = 0 ; i < numDrivers ; i++) {
    if (drivers.CheckTty(tty)) {
      modem = drivers.CreatePseudoModem(tty, route, callbackEndPoint);

      if (!modem) {
        myPTRACE(1, "seudoModemDrivers::CreateModem " << tty << " was not created";
        return NULL;
      }
      break;
    }
  }

  if (!modem) {
    myPTRACE(1, "seudoModemDrivers::CreateModem " << tty << " is not a valid value";
    return NULL;
  }

  if (!modem->;IsValid()) {
    myPTRACE(1, "seudoModemDrivers::CreateModem " << tty << " is not valid";
    delete modem;
    return NULL;
  }

  return modem;
}

PStringArray PseudoModemDrivers:escriptions()
{
  PStringArray descriptions;

  for (int i = 0 ; i < numDrivers ; i++) {
    descriptions.Append(new PString(drivers.name));

    PStringArray description = drivers.Description();

    for (PINDEX j = 0 ; j < description.GetSize() ; j++)
      descriptions.Append(new PString(PString("  " + description[j]));
  }

  return descriptions;
}
///////////////////////////////////////////////////////////////

论坛徽章:
0
2 [报告]
发表于 2005-04-26 17:41 |只看该作者

看不懂程序。。。C++的

俺想通了,不用大家回答了。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP