在库中隐藏类的使用
Hiding use of class inside a library
我正在为Arduino创建一个简单的库,目的是包装并隐藏其中的另一个类。我希望能够向最终用户完全隐藏底层类。
我在一定程度上简化了这个例子以保持清晰,但同样的问题也存在。
我试图包装的类是名为TwoWire的Wire库。
包装器库的头文件:
#ifndef __DERIVEDONEWIRE2_H__
#define __DERIVEDONEWIRE2_H__
#include <Wire.h>
class DerivedWire
{
private:
TwoWire wire;
public:
DerivedWire();
};
#endif
CPP文件:
#include "DerivedWire.h"
DerivedWire::DerivedWire()
{
}
使用它的Arduino草图:
#include <DerivedWire.h>
DerivedWire derivedWire;
void setup()
{
}
void loop()
{
}
这无法编译:
/Users/andrew/Documents/Arduino/librarys/DerivedWire/DerivedWire.h:9:错误:"TwoWire"未命名类型
在主草图顶部包含Wire.h允许编译:
#include <DerivedWire.h>
#include <Wire.h>
DerivedWire derivedWire;
void setup()
{
}
void loop()
{
}
但是,我想向DerivedWire库的用户完全隐藏使用了Wire库/TwoWire类。
我曾尝试将"TwoWire wire;"更改为"TwoWire*wire
/Users/andrew/Documents/Arduino/librarys/DerivedWire/DerivedWire.h:9:错误:ISO C++禁止声明没有类型的"TwoWire"/Users/andrew/Documents/Arduino/librarys/DerivedWire/DerivedWire.h:9:错误:应为";"在'*'标记之前
我尝试过其他一些东西,但似乎我需要在顶级中包含Wire.h。
我该如何解决这个问题?
Wire实例在库的最后一行创建。https://github.com/lstoll/arduino-libraries/blob/master/Wire/Wire.cpp你不应该有多个TwoWire实例,也没有理由隐藏它,但如果你真的想隐藏它,你必须删除那一行。arduino构建方法要求库包含在主草图中,这样在没有重大更改的情况下就无法隐藏该部分。
如果你真的需要隐藏这个Wire实例,你可以将Wire库的源代码复制到你自己的库中,并删除最后一行。
查看"皮条客习惯用法",这里有一个链接可以帮助您入门:http://en.wikipedia.org/wiki/Opaque_pointer
Pimpl习惯用法是C++中隐藏类实现和所有不希望可见的函数的一种方法。
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 结构和双指针隐藏在其他结构中,多层混淆
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 参数包构造函数在类模板中隐藏用户定义的转换
- 如何等待窗口隐藏在Qt中?
- 如何使用类型别名从模板化类中隐藏模板列表
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 名称隐藏对静态函数继承的实例使用
- 在 Linux 中使用 ioctl() 获取隐藏功能报告时,零字节消失
- 从多个模板化基类派生时出现"隐藏重载的虚函数"警告
- 如何在 Omnet++ 5.6.1 中隐藏箭头?
- 在C++中隐藏键盘记录器的控制台窗口
- 从静态库使用时隐藏不透明结构的内容
- 隐藏用于聚合初始化的空基类
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- Qt中的包装连接方法隐藏了编译器所需的信息
- 隐藏重载虚拟功能的模板化访客:SFINAE 在使用?
- 在 ui 文件中隐藏 QTabWidget 中的单个选项卡窗格?
- C++ [错误] 声明'char '隐藏参数。什么意思?
- 隐藏由 WinAPI 调用创建的窗口