有一个全局函数注册服务:
// services call this to register upon creation
extern void RegisterService(adapter::Service *s);
然后在.cpp文件中的某个地方某些服务本身:
// create the adapter and register with libecap to reach the host application
static const bool Registered = (libecap::RegisterService(new Adapter::Service), true);
为什么不简单地致电libecap :: registerservice(新的apapter :: service)进行注册?它看起来甚至陌生,因为全局变量未使用注册。
因为您无法将表达式放在源文件中漂浮的空白空间中。仅声明。
这是迫使在此评估表达式的常见方法,即使后来从未真正使用了所得的对象。
代码的AITHOR想要拥有一个布尔标志,该标志将说明该服务是否已经注册。他可以写作
libecap::RegisterService(new Adapter::Service);
static const bool Registered = true;
规定注册是局部变量。
但是,如果注册不是本地变量,那么他可能不会在其他功能(或main)之外调用功能。因此,定义全局bool变量(具有外部或内部链接)的唯一方法,同时调用具有返回类型void的函数的方法是以下
static const bool Registered = (libecap::RegisterService(new Adapter::Service), true);
逗号运算符的表达式的结果是True,将以此值初始化注册。同时函数libecap :: gubisterservice(新的apapter :: service)将被调用。
作为替代方案,他可以定义一个类别的构造函数,其构造函数将包含该功能的调用,而驱动器将包含一些未注册的东西。