模板需要编译时常量值
Template requires compile-time const value
伙计们。我有这样的情况,模板参数取决于运行时间。 我的职能:
string DecToBin(int num)
{
bitset<(num < 256 ? 8 : 32)> bits(num);
return bits.to_string();
}
因此,它不能肯定地编译。除了下面的示例之外,解决方案是什么? 谢谢
string DecToBin(int num)
{
if(num < pow(2, 8))
{
bitset<8> bits(num);
return bits.to_string();
} else if(num < pow(2, 16))
{
bitset<16> bits(num);
return bits.to_string();
} else if(num < pow(2, 32))
{
bitset<32> bits(num);
return bits.to_string();
} else
{
bitset<64> bits(num);
return bits.to_string();
}
}
#include <cstdint>
#include <string>
#include <bitset>
#include <iostream>
#include <iomanip>
std::string DecToBin(std::uint64_t num)
{
std::bitset<64> bits( num );
int num_bits{ 8 };
for (uint64_t test{ 0xff };
~test && test < num;
test = (test << 8) | test, num_bits += 8);
return bits.to_string().substr(64 - num_bits);
}
int main()
{
for (std::uint64_t i{1}; i != 0; i <<= 1)
std::cout << std::setw(64) << DecToBin(i) << 'n';
}
输出:
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
0000000100000000
0000001000000000
0000010000000000
0000100000000000
0001000000000000
0010000000000000
0100000000000000
1000000000000000
000000010000000000000000
000000100000000000000000
000001000000000000000000
000010000000000000000000
000100000000000000000000
001000000000000000000000
010000000000000000000000
100000000000000000000000
00000001000000000000000000000000
00000010000000000000000000000000
00000100000000000000000000000000
00001000000000000000000000000000
00010000000000000000000000000000
00100000000000000000000000000000
01000000000000000000000000000000
10000000000000000000000000000000
0000000100000000000000000000000000000000
0000001000000000000000000000000000000000
0000010000000000000000000000000000000000
0000100000000000000000000000000000000000
0001000000000000000000000000000000000000
0010000000000000000000000000000000000000
0100000000000000000000000000000000000000
1000000000000000000000000000000000000000
000000010000000000000000000000000000000000000000
000000100000000000000000000000000000000000000000
000001000000000000000000000000000000000000000000
000010000000000000000000000000000000000000000000
000100000000000000000000000000000000000000000000
001000000000000000000000000000000000000000000000
010000000000000000000000000000000000000000000000
100000000000000000000000000000000000000000000000
00000001000000000000000000000000000000000000000000000000
00000010000000000000000000000000000000000000000000000000
00000100000000000000000000000000000000000000000000000000
00001000000000000000000000000000000000000000000000000000
00010000000000000000000000000000000000000000000000000000
00100000000000000000000000000000000000000000000000000000
01000000000000000000000000000000000000000000000000000000
10000000000000000000000000000000000000000000000000000000
0000000100000000000000000000000000000000000000000000000000000000
0000001000000000000000000000000000000000000000000000000000000000
0000010000000000000000000000000000000000000000000000000000000000
0000100000000000000000000000000000000000000000000000000000000000
0001000000000000000000000000000000000000000000000000000000000000
0010000000000000000000000000000000000000000000000000000000000000
0100000000000000000000000000000000000000000000000000000000000000
1000000000000000000000000000000000000000000000000000000000000000
相关文章:
- C++常量数组的编译时间较长
- 在编译时将常量字符* 转换为常量 char_type*
- 将编译时常量向量转换为堆分配版本
- 如何在常量计算表达式中获取编译时错误?
- 如何在编译时解析静态常量 std::string?
- 有没有办法在类实例中存储编译时常量?
- 检测编译时文本和常量
- ARM C++编译器不会编译具有可变常量成员的结构
- 强制在编译时计算类的类的常量成员
- Constexpr 类采用常量引用不编译
- 为什么对数组的常量左值引用不编译在下面?
- 由于缺少常量而出现编译错误
- 为什么在将常量 ptr 分配给常量引用时没有收到编译错误?
- 为什么可以在编译时访问非常量、非静态成员而无需类的实例
- 不是 VS2017 中的编译时常量表达式
- 将编译时定义大小的数组初始化为常量表达式
- 将大小为编译时常量的数组初始化为单个值
- 如何为 std::array 声明全局编译时常量?
- 返回非常量引用编译的 Const 方法
- 常量正确性编译错误到模板函数中的无效转换错误