繁体   English   中英

宏或 c++ 模板更改 struct 或 class 中的 const 变量值

[英]Macro or c++ template to change const variable value in struct or class

我正在 C++ 中实现一个协议,这是一个正在进行的项目,因此协议经常更改,我必须相应地更改代码。

假设我定义一条消息如下:

struct Message {
  const int MSG_LENGTH = 3; // sizeof(a) + sizeof(b)
  uint8_t a;
  uint16_t b;
};

现在我想在Message中添加一个新字段uint32_t c ,但我不想手动更改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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM