如何解决宏或 C++ 模板以更改结构或类中的 const 变量值
我正在用 C++ 实现一个协议,这是一个正在进行的项目,因此协议经常更改,我必须相应地更改代码。
假设我按如下方式定义消息:
struct Message {
const int MSG_LENGTH = 3; // sizeof(a) + sizeof(b)
uint8_t a;
uint16_t b;
};
现在我想在 uint32_t c
中添加一个新字段 Message
,但我不想手动更改 MSG_LENGTH
。
是否可以使用一些技巧(宏或模板)来实现这一点?
谢谢。
解决方法
一种想法可能是以 std::tuple
的形式定义消息:
#include <cstddef>
#include <cstdint>
#include <iostream>
#include <tuple>
template<class... Types>
struct MessageBase : std::tuple<Types...> {
static constexpr size_t MSG_LENGTH() {
return (sizeof(Types) + ...); // calc the size of the fields
}
};
struct Message : MessageBase<uint8_t,uint16_t> {};
int main() {
constexpr auto x = Message::MSG_LENGTH();
std::cout << x << '\n'; // prints 3
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。