【发布时间】:2017-02-09 18:01:18
【问题描述】:
我正在寻找一种惯用的方法来优化我编写的这个模板。
我主要关心的是如何正确定义模板参数n并将其用作返回参数,而用户不得覆盖它。
我也愿意接受有关如何以惯用的 C++14 方式编写此模板的其他建议。
template<
typename InType=uint32_t,
typename OutType=float,
unsigned long bits=8,
unsigned long n=(sizeof(InType) * 8) / bits
>
std::array<OutType,n> hash_to_color(InType in) noexcept {
InType mask = ~0;
mask = mask << bits;
mask = ~mask;
std::array<OutType,n> out;
auto out_max = static_cast<OutType>((1 << bits) - 1);
for (auto i = 0; i < n; i++) {
auto selected = (in >> (i * bits)) & mask;
out[i] = static_cast<OutType>(selected) / out_max;
}
return out;
}
【问题讨论】:
-
如果你想确保用户不会覆盖它,也许你可以
static_assert它是正确的值?