c++ - 类成员参数中的 Consexpr
问题描述
我想在我的类声明的各个部分的 std::array 的模板参数中指定一个变量,如下所示:
class SetAngles
{
public:
constexpr int txSize() const { return 19; }
constexpr int rxSize() const { return ack.size(); }
void txParse(std::array<uint8_t, txSize()>& packet)
{
...
}
private:
std::array<uint8_t, txSize()> txPacket = {0xFA, 0x0E, 0x11, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
};
所以如果我需要改变它,我不必在不同的地方多次改变它。显然上面的内容不是 constexpr 的工作原理......我也尝试过使用公共成员变量而不是函数,但仍然失败。我得到编译器错误:
cannot call member function ‘constexpr int GimbalPacket::SetAngles::txSize() const’ without object
我知道#define 语句可以工作,但我希望将其封装在类中。关于如何做到这一点的任何建议?
解决方案
我无法像最初想要的那样在课堂上使用 constexpr。最后只是在类之外放置一个 constexpr 并将两者包装在命名空间中以完成封装。
推荐阅读
- css - 在 CSS 中更改 Twitch Chat 的字体颜色
- java - 如何使用正则表达式从 VIN 获取汽车制造商
- python - Tensorflow GANs 鉴别器不学习
- php - 将外部 $_SESSION 值传递到 CakePHP 框架 [CakePHP 4.x]
- c++ - 对统一写入筛选器 (UWF) 的某些 WMI 调用返回拒绝访问错误
- javascript - 如何使用 infura 在部署在 ropsten 测试网上的智能合约中调用 setter 函数
- python - KerasRegression Loss 太大
- node.js - Nuxt.js - 如何仅在服务器端填充应用程序启动时的初始 vuex 状态?
- java - 如何检查 recyclerView 是否为空 Espresso
- javascript - 新的 Intl.NumberFormat 'de-DE' 没有返回预期的结果