【发布时间】:2013-10-03 21:07:33
【问题描述】:
我正在查看我正在从事的个人项目的一段 C++ 源代码,但我无法弄清楚以下 sn-p 中发生了什么:
Event EV_ScriptThread_Execute(
"execute", EV_DEFAULT, NULL, NULL, "Execute the thread."
);
class ScriptThread : Listener
{
{ &EV_ScriptThread_Execute, Execute },
{ NULL, NULL}
};
void ScriptThread::Execute(Event *ev)
{
//Stuff
}
据我所知,它创建了一个事件类的实例并将其存储在EV_ScriptThread_Execute 中。然后它定义了 ScriptThread 类,但我不知道如何解释它后面的行。
有人能解释一下会发生什么吗?如果{ &EV_ScriptThread_Execute, Execute }, 是完整的,而不是看起来是简写的符号,它会是什么样子。
编辑:
显然,我误解了我认为会产生的宏定义:class ScriptThread : Listener,基于我回去的所有回复,发现它实际上构造了某种数组。它仍然让我对发生的事情一无所知......因为我实际上无法编译代码(因为它只是一个 sn-p),我也无法真正查看预编译文件。
这样做的结果是什么?
ResponseDef<ScriptThread> ScriptThread::Responses[] =
{
{ &EV_ScriptThread_Execute, Execute },
{ NULL, NULL}
};
另一个编辑: 所以我发现 ResponseDef 是一个看起来像这样的结构:
template< class Type >
struct ResponseDef
{
Event *event;
void (Type::*response)(Event *event);
};
最终,这意味着数组被一个结构填满,该结构接受一个指向 Event 实例的指针以及一个指向方法的指针,这将解释初始化程序!
感谢大家让我重回正轨!
【问题讨论】:
-
在我看来就像一个初始化列表。你能展示 Lister 类的定义吗?但正如 Sebastian 所建议的,它也可以是一个宏。生成预处理文件以获得想法。
-
@Mahesh 在我看来,它也非常像一个初始化列表。我对他的sn-p有点怀疑。它一开始就像一个类定义,但在 C++ 语法中没有产生式允许类定义的开头
{后面跟着第二个{。即使Listener是一个宏,它也必须完成类定义并开始数据定义,这样才有可能合法。 -
更新了帖子,我误解了最初的宏,但它仍然对发生的事情一无所知。与其说是宏本身,不如说是
{ &EV_ScriptThread_Execute, Execute },如何适合数组... -
解决了,谢谢大家!