将用于串行通信的消息存储为c++可行的成员变量
Storing a message meant for serial communication as a member variable in c++ viable solution?
我正在从一些简单的C函数创建一些c++库,这些函数主要与USB串行通信有关。我是用visual studio 2010编写的,目的是移植到mac和linux。
我目前有一个SerialCommunication类和一个PumpComm子类。目前,有一个C函数creatatemessage (uint8 msg[]), SendMessage(uint8 msg[]), ReadSerial(uint8 readmsg[])等。
我的问题是:将msg[]更改为成员变量而不是函数参数是否有任何缺点?(伪代码):
int main()
{
SerialPort sp;
sp.OpenSerial("COM19");
sp.CreateMessage("Messagetosend1234");
sp.SendMsg();
}
class SerialPort
{
private:
uint8 msg[];
public:
int32 OpenSerial();
int32 CreateMessage(uint8 msg[]);
}
我看到的优点包括:1)msg由它要发送到的串行端口明确拥有,2)msg的范围是串行端口的范围,3)msg的实现可以隐藏(当我添加getter/setter时)。所以基本上是OOP的优点。我对c++和OOP相当陌生,所以我可能遗漏了一些东西,特别是在串行通信方面。谢谢你的宝贵时间。
消息是否是COM通道的一部分?我会说你通过频道发送消息。您的设计是将"如何"(通道)与"什么"(消息)紧密耦合。此外,您还隐式地向代码中添加了许多状态依赖关系——例如,您必须在调用SendMsg之前调用CreateMessage。
总而言之,有些事情可能会在你以后适得其反:
- 如果需要从多个线程访问通道
- 如果您的消息超过一个字节缓冲区
- 如果你重构你的代码并错误地交换了一些调用
因此,我将message和channel保持为两个独立的类:
class Message {
private:
uint8 *buffer;
size_t length;
public:
Message(uint8 *buf, size_t len) : buffer(buf), length(len) { }
size_t getLength() const { return length; }
const uint8 *getData() const { return buffer; }
};
class SerialPort
{
public:
int32 OpenSerial();
int32 SendMsg(const Message& msg);
}
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- 多成员Constexpr结构初始化
- 我们可以访问一个不存在的联盟的成员吗