我对下面的C ++代码感到困惑:
// The global task manager
PT(AsyncTaskManager) taskMgr = AsyncTaskManager::get_global_ptr();
// The global clock
PT(ClockObject) globalClock = ClockObject::get_global_clock();
'PT'是类型名称吗?为什么之后会有括号?我从来没有在C ++中看到过这样的语法(可能我应该再次阅读一些C ++教程?)
答案 0 :(得分:3)
“c ++ AsyncTaskManager”的第二次Google搜索(首先是您的问题):
http://www.panda3d.org/forums/viewtopic.php?t=5115
反过来导致http://www.panda3d.org/,其中说:
Panda3D是一款游戏引擎,是3D渲染和游戏的框架 Python和C ++程序的开发。
所以你显然正在处理与该引擎相关的一段代码(之前我没有听说过)。在线浏览文档并不能快速显示PT
的任何定义,但是如果您下载源代码并只搜索“#def PT”的所有文件,请发送电子邮件:
文件pointerTo.h
,从第166行开始:
// Finally, we'll define a couple of handy abbreviations to save on
// all that wasted typing time.
#define PT(type) PointerTo< type >
如果进一步调查,您会发现PointerTo
实际上是一个非常复杂的模板类,记录为:
PointerTo是一个模板类,它实现了一个指向的智能指针 从ReferenceCount派生的对象。
所以PT(AsyncTaskManager) taskMgr = AsyncTaskManager::get_global_ptr();
真的是:
PointerTo<AsyncTaskManager> taskMgr = AsyncTaskManager::get_global_ptr();
如果我这样说,我认为宏所保存的所有“浪费的打字时间”很容易被理解代码所需的所有阅读和研究时间所消耗。正如整个问题以及所有评论和答案所证明的那样。
答案 1 :(得分:0)
节省打字工作量。键入PT(AsyncTaskManager)
比AsyncTaskManager*
更容易。你也可以这样做:
#define BEGIN {
#define END }