问题描述
请原谅新手问题。我在多个类中创建了一组函数并将它们包装在一个静态库中(使用 Qt Creator 的 staticlib 配置)。在更高级别的程序中,我通过创建 MyLibrary 类的新实例来访问该功能,如下所示:
#include "mylibrary.h"
myLibrary *myLibrary;
myLibrary = new MyLibrary(); // new instance of the MyLibrary class (main entry)
myLibrary->initialize(); // initializes hardware properties
如果我只需要从程序中的一个地方访问库,这是可以的。但是,我想在多个线程中处理多个操作,并且我会将应用程序扩展到几个新类。 initialize() 方法配置硬件参数,这些参数只能在应用程序启动时完成一次。但是,我希望从应用程序的任何位置访问库的所有公共方法。我想实现这样的目标:
main.cpp
int main(int argc,char *argv[])
{
...
MyLibrary::initialize(); // call the configuration method
// Current issue: call to non-static member function without an object argument
...
}
classA.cpp
void doSomething()
{
MyLibrary::setParametera(0); // possible after initialization
}
classB.cpp
{
MyLibrary::getParametera(); // should return any value set by the user (for example "0" as above)
}
我在网上查看了可能的解决方案,我遇到的最常见的建议是在高级应用程序中使用单例模式。也许我可以避免这种情况,因为在这个阶段我仍然可以重新工作。您能否建议如何实现该目标?
解决方法
将 class 更改为 namespace。那么没有人可以实例化多个实例。
您的示例用法也完全适合命名空间。