关于一个类的问题 有点晕

bigplume 2015-01-15 06:03:34
大家好 我有一个类为
class A{},在文件A.h 中声明了这个类, 在文件A.cpp中定义了成员函数等等。

类中有一个成员变量
std::vector<cv::Mat> x;
其中这个cv::Mat 是opencv的文件结构,
所以A.h的内容可以看成

#include <opencv2/opencv.hpp>
class A
{
public:
void function();
.......
std::vector<cv::Mat> x;
}

问题来了,,由于项目的要求,要我不要在类A的头文件中包含opencv的头文件。
也就是A.h 不要包含 opencv头文件 而是在类A的实现文件 也就是 A.cpp中包含opencv的头文件
但是在A.h中又要用到 cv::Mat 这个结构。。。。 请问大家有什么好办法吗??
...全文
266 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigplume 2015-01-20
  • 打赏
  • 举报
回复
谢谢,基本是按照2楼的方法 改改用了
mymtom 2015-01-15
  • 打赏
  • 举报
回复
引用 4 楼 mymtom 的回复:
按照楼主的描述 std::vector<cv::Mat> x; 是个私有成员吧!
用Private Implemention吧。
mymtom 2015-01-15
  • 打赏
  • 举报
回复
按照楼主的描述 std::vector<cv::Mat> x; 是个私有成员吧!
假正经的班长 2015-01-15
  • 打赏
  • 举报
回复
头文件一般尽量少的包含其他头文件,看你们这需求,应该是要暴露出这个类的头文件吧。 提供一种思路。增加一个基类(暂称B),基类B中仅包含外部所关心的方法,然后你这个类(暂称D)继承自该基类B。那你这个类D头文件中有什么,就无所谓了。然后提供工厂类(F),工厂类F的CPP中包含类D,工厂类F的头文件中提供相关创建对象的接口,也就是创建D类对象,赋给B类型的指针,把这个指针提供给外部使用。同时你的工厂类的头文件也应该提供出去。 这样做缺点是增加了工厂类。
JiangWenjie2014 2015-01-15
  • 打赏
  • 举报
回复
这么做,不过也有缺陷

/************************/
// MyClass.hxx

class MyClass;
class MyClassImpl;

class MyClass
{
public:
  void function();
  // ..
private:
  MyClassImpl *m_impl;
};
/************************/
// MyClass.cxx
class MyClassImpl
{
public:
  void function() {};
  // ...
private:
  std::vector<cv::Mat> x;
};

void MyClass::function()
{
  return m_impl->function();
}
pengzhixi 2015-01-15
  • 打赏
  • 举报
回复
std::vector<cv::Mat*> x; 这样

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧