如何解决如何避免在我的标题中包含 OpenCV?
希望你们一切都好。刚好有一个菜鸟级的C++编码问题,希望能收集一些思路。我正在编写一个图像处理模型,该模型将被包装到基于 C 的 DLL API。
/* myModel.h */
#include "opencv2/imgproc.hpp"
#include "opencv2/objdetect.hpp"
#include "nlohmann/json.hpp"
#include <variant>
class myModel
{
public:
myModel();
loadCascadeClassifier( std::string fpath );
struct DetectedResults
{
bool is_detected,cv::Rect bounding_Box;
cv::Point center;
};
myModel::DetectedResults detect( cv::Mat& input_image );
private:
std::vector< cv::Rect > Box_stack;
cv::CascadeClassifier Classifier;
nlohmann::json json_params;
// some other members...
}
/* myModel.cpp */
// Implementations...
代码可以正常工作,但是在其他项目中包含 myModel.h 变得麻烦。我意识到在 myModel.h 中包含资源可能不是一个好习惯,因为:
- 使用 myModel.cpp /.h 的其他项目需要具有相同的包含/库和链接器。
- 一旦 myModel.h 更改,重新编译需要时间
- 我不知道,但是使用包含的对象作为输入参数好不好?
因此我研究了一些像this.这样的文章,这表明避免包含在标题中:
前向声明
不适用于我的情况。根据 this discussion
的说法,我似乎无法为 OpenCV 对象预先声明不完整类型的类私有实现
我应该试试这个吗?试图弄清楚如何应用它。
这不是寻求错误的解决方案,因此欢迎您以任何形式提出任何想法。我很乐意了解 C++ 专业人士如何解决此类问题。提前致谢!
TL;DR:如何避免在头文件 myModel.h 中包含资源?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。