gpt4 book ai didi

c++ - Const 接收一个 var,我不能将它传递给模板

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:10 26 4
gpt4 key购买 nike

我想做的是:

int const bitsPerInt = log2(X);
bitset<bitsPerInt> bits(a random number...);

但是我得到这个错误:

'bitsPerInt' cannot appear in a constant expression error: template argument 1 is invalid

最佳答案

如果你真的需要它工作,制作你自己的在编译时工作的 log2 并将它传递给 bitset 的模板参数。

constexpr unsigned Log2(unsigned n, unsigned p = 0) {
return (n <= 1) ? p : Log2(n / 2, p + 1);
}

constexpr size_t bitCount = Log2(X);
std::bitset<bitCount> bits;

Live example .


这是使用模板元编程的解决方案,即不使用 constexpr:

template<int N,unsigned int P=0>
struct Log2 { enum { value = Log2<N/2,P+1>::value }; };

template <unsigned p>
struct Log2<0, p> { enum { value = p }; };

template <unsigned p>
struct Log2<1, p> { enum { value = p }; };

std::bitset<Log2<4>::value> bits;

Live example .

此版本应适用于 C++03 和 C++11;但是,如果您可以访问 C++11,我仍然推荐使用 constexpr 方式,因为它更简洁(更易于理解)。

关于c++ - Const 接收一个 var,我不能将它传递给模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com