【问题标题】:initializing c++ classes globally全局初始化 c++ 类
【发布时间】:2017-06-17 03:50:54
【问题描述】:

我是 C++ 课程的初学者并使用 dlib 人脸检测器。在与网络摄像头一起使用的示例代码中,人脸检测和姿势模型在 main 函数中加载,如下所示:

int main(){
    frontal_face_detector detector = get_frontal_face_detector();
    shape_predictor pose_model;
    deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;

}

但是,我的项目的结构是通过另一个函数而不是示例中的 main 调用 dlib 人脸检测。因此,我需要使模型全局化,以便执行 dlib 的函数知道“检测器”和“姿势模型”是什么,而不必将其作为参数传递给该函数。有没有办法做到这一点?如果我在函数本身中加载模型,那么每次调用函数时都会加载它,从而降低性能。

静态 dlib::frontal_face_detector 检测器; 静态 dlib::shape_predictor 姿势模型;

目前我正在使用“静态”将它们加载到函数本身中,但我不确定这是否是正确的 C++?为问题的奇怪格式道歉,因为这是我在这个论坛上的第一个问题。感谢理解和帮助!! 谢谢

【问题讨论】:

  • 函数外的静态。如果在多个文件中,将该变量重新声明为“extern”。您也可以在所有其他源文件包含的标头中执行此操作。来源:learncpp.com/cpp-tutorial/42-global-variables
  • 是的,你的用法是正确的:函数内部的静态限制了范围(只有函数可以看到),每次程序运行只有一个实例化,并且在函数第一次运行时会发生实例化叫。但是,如果您有线程程序,则需要互斥锁。如果这些限制不妨碍您遵循您的规范,那么在函数中使用 static 就可以了。
  • 感谢 kfmfe04。这有帮助。

标签: c++ class dlib


【解决方案1】:

您可以在初始化它们时简单地全局声明它们,就像对任何其他全局变量一样。

frontal_face_detector detector = get_frontal_face_detector();
shape_predictor pose_model;

int main(){

       deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;
       ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2021-07-24
    相关资源
    最近更新 更多