在类型名称后使用括号时,在C ++中意味着什么?

时间:2014-08-31 11:51:58

标签: c++

我对下面的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 ++教程?)

2 个答案:

答案 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 }