我使用一个模块级的函数调用来注册的注册类工厂功能:G ++ 4.9 - 模块范围内的函数未被调用?
static Controller * ctor(Device * device, const char *) { return new NullController(device); }
static int s_id = DeviceRegistry::RegisterControllerClass("null", ctor);
//------------------------------------------------------------------------------
NullController::NullController(Device * device)
: Controller(device, "null", s_id)
{
}
其中例如:: DEV :: DeviceRegistry :: RegisterControllerClass()是在命名空间如免费功能DEV。这在Visual Studio下运行良好,但是在GCC/Linux上运行代码似乎没有被调用 - 如果我断点RegisterControllerClass(),它不会被调用。为了防止编译器优化s_id字段,我使用它来构造基类。所以我相信不是这样。这段代码有什么问题?
您必须确保翻译单元已链接。一种方法是从'main'中调用其中的函数。 –
什么是模块范围? – NathanOliver
在翻译单元内(即cpp文件+包含的标题)。如果他们没有被标记为“静态”,我会说'全球'。 –