实际上这个“问题”非常简单。在计算图标偏移量时,我想到了以下方法:
namespace Icons {
struct IconSet {
constexpr IconSet(size_t base_offset) noexcept
: base_offset_(base_offset), icon(base_offset * 3), iconSmall(icon + 1), iconBig(icon + 2) {
}
size_t icon;
size_t iconSmall;
size_t iconBig;
size_t base_offset_;
constexpr size_t next() const {
return base_offset_ + 1;
}
};
static constexpr IconSet flower = IconSet(0);
static constexpr IconSet tree = IconSet(flower.next());
static constexpr IconSet forest = IconSet(tree.next());
static constexpr IconSet mountain = IconSet(forest.next());
}
现在,例如可以编写Icons::tree.iconBig
来获取该图标的计算偏移量。基本上,设计师可以更改图标 - 有时也会添加/删除 - 但是按照惯例始终必须提供整个集(普通、小和大)。
正如您所看到的,这种方法的问题在于我不得不执行next()
函数并重复使用它 - 正常的枚举类型不会有这种缺点。
我知道BOOST_PP和其他宏技巧,但我希望有一些不需要宏的东西 - 因为我有一种感觉不需要它,我比较喜欢我已经用简单的next()
函数实现的功能。
当然,另一个解决方案只是普通的枚举类型和一个计算函数,但那就失去了预计算的目的。
因此,我正在寻找一个简单且可移植的解决方案,可以提供类似枚举类型的功能。如果例如只内联,它不必是编译时或constexpr
。