C 编译时间添加
C++ compile-time bitmask addition
我有许多添加的位掩码(层,逻辑或 |
),但是由于它们是常数,所以我想在编译时这样做。输入高级模板区域...
我尝试了递归:
template <uint8_t mask, uint8_t...masks>
struct MaskAdd {
static const uint8_t value = masks | MaskAdd<masks>::value;
};
template <uint8_t mask>
struct MaskAdd {
static const uint8_t value = mask;
};
给出以下错误:
file.cpp:3:55: error: parameter packs not expanded with ‘...’:
static const uint8_t value = masks | MaskAdd<masks>::value;
^
file.cpp:3:55: note: ‘masks’
file.cpp:7:8: error: redeclared with 1 template parameter
struct MaskAdd {
^
file.cpp:2:8: note: previous declaration ‘template<unsigned char mask, unsigned char ...masks> struct MaskAdd’ used 2 template parameters
struct MaskAdd {
^
我还尝试了这种奇怪的语法,这是(大概)对参数包上的cppreference页面的误解:
template <uint8_t...masks>
struct MaskAdd {
static const uint8_t value = (masks | ...);
};
引发了这些错误:
file.cpp:3:43: error: expected primary-expression before ‘...’ token
static const uint8_t value = (masks | ...);
^
file.cpp:3:43: error: expected ‘)’ before ‘...’ token
我感觉该解决方案在地狱的template<template<
地区,如果有人能解释我要感激的那些。
您在此表达式中有错字:
masks | MaskAdd<masks>::value
应该是:
mask | MaskAdd<masks...>::value
// ^ no 's' ^ the expansion compiler was talking about
然后,它将抱怨类的重新分支,因此请提供专业化(单个参数):
template <uint8_t mask>
struct MaskAdd<mask> { .. };
这是我的编译时间蒙版的侵略...第一个模板参数是从右数计数的位置,第二个是将位数为1的位数。
。template <unsigned START, unsigned RANGE>
struct Mask
{
static const size_t val = 1 << START | Mask<START + 1, RANGE - 1>::val;
};
template <unsigned START>
struct Mask<START, 0>
{
static const size_t val = 0;
};
如果我想与数字14(0000 1110)进行掩盖:
unsigned mask = Mask<1, 3>::val;
相关文章:
- 在 C++ 中为文件名添加时间戳
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 将结构时间规范添加到类(似乎没有其他类型的)会导致EXEC_BAD_ACCESS
- 使用霍华德·欣南特的日期库将时间信息添加到year_month_day
- 即使在多任务处理时,添加用户时间 + 系统时间(来自 shell 的时间命令)是否是一种可靠的措施?
- 添加两个时间值存储为数据库中的字符串
- 将时间戳添加到文本文件中的空行中
- 如何将持续时间添加到time_point
- 使用结构显示军事时间,并将一秒钟的时间添加到用户输入(C )中
- 标准::时间 将天数添加到当前日期
- MF SinkWriter mp4文件的播放持续时间是添加音频样本时的一半,图像的播放速度也是添加音频样本的两倍
- 添加时间戳值
- 以 hh:mm 格式添加时间,C++
- C 编译时间添加
- 向C++中的任何日期结构添加一定时间量
- 使用 std::cout 添加时间戳
- Windows Batch - 如何在将标准输出重定向到文件时添加时间戳
- C++ 帮助 - 在函数中使用 Ctime 为变量添加时间戳
- 向日志添加时间
- 如何给OutputDebugString()添加时间戳