类的静态成员变量
Static member variable of a class
我有一个SVM分类器保存为"classifier.xml"。我从网络摄像头输入图像,并想对它们进行分类。因此,不是为每个输入图像加载分类器,我只是想只加载一次分类器(类似于静态),使用以下代码:
mySvm.load("classifier.xml");
问题:目前我已经声明了cv::SVM mySvm;
作为全局变量,但我想摆脱全局变量。那么,我该怎么做才能使cv::SVM mySvm;
成为Class Classifier
的成员变量呢?
我的文件结构如下:
(1) classifier.h
class Classifier
{
private:
public:
void getSvm();
};
(2) main.cpp
int main()
{
Classifier objectSvm;
objectSvm.getSvm();
}
(3) loadSVM.cpp
#include "classifier.h"
cv::SVM mySvm;
void svm::getSvm()
{
mySvm.load("classifier.xml");
}
您可以使用静态成员变量并提供访问它的方法:
class Classifier
{
private:
static cv::SVM svm;
public:
void loadSvm(const char* fileName) { /* code for loading SVM */ }
cv::SVM& getSVM() { return svm; }
};
成员函数loadSVM
进行加载,getSVM
简单地返回对变量的引用。
如果您担心用户多次加载SVM,则添加一个类型为bool
的静态成员,该成员指示对象是否已加载。
class Classifier
{
private:
static cv::SVM svm;
static bool already_loaded = false; // required C++11
public:
void loadSvm(const char* fileName)
{
if (already_initialized)
return;
// code for loading SVM
}
cv::SVM& getSVM() { return svm; }
};
然后像往常一样创建Classifier
的实例并加载XML。
int main()
{
Classifier c;
c.loadSVM("foo.xml");
// Whenever you want to use the SVM, go for member function `getSVM()`.
// E.g. assuming the SVM has a `foo` member function:
c.getSVM().foo();
}
(1) classifier.h
namespace cv { class SVM; }
class Classifier
{
private:
cv::SVM mySvm;
void loadSvm();
public:
Classifier();
void getSvm();
};
(3) loadSVM.cpp
#include "classifier.h"
void Classifier::loadSVM() { mySvm.load("classifier.xml"); }
Classifier::Classifier() { /* loadSVM(); could load early */ }
void Classifier::getSvm() { loadSVM(); }
(2) main.cpp
int main()
{
Classifier objectSvm;
objectSvm.getSvm(); // loading happens on this line, as your example
// loading only shared for this instance of Classifier
objectSvm.doSomething();
objectSvm.doSomethingAgainWithSameClassifier();
Classifier objectSvmAnother;
objectSvmAnother.getSvm(); // load another classifier
objectSvmAnother.doSomethingWithDifferentClassifierInstance();
}
相关文章:
- C++:是否可以使用非静态成员变量模板?
- 如何在复杂继承中访问静态成员变量
- 静态成员变量不会由 gettext 转换
- 未使用的C++未优化的静态成员函数/变量
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- C++ lambda - 捕获静态成员变量
- 多线程处理中的静态成员变量
- 纯标头库中静态成员变量的正确设置器和 getter
- 如何从具有专用化的类模板定义静态成员变量?
- 从静态成员函数访问私有非静态类变量 - C++
- 静态变量与静态成员
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 声明和定义类静态成员变量不会导致多重声明,这是为什么?
- 为什么不允许静态成员变量的初始化在类中,而允许静态静态成员的初始化
- 类中的静态成员变量和C++中的全局变量有什么区别?
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- C++ 静态成员变量 - 文件之间的访问
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何在运行时使用静态成员函数初始化静态成员变量
- 如何在类静态成员中引用静态变量?