gpt4 book ai didi

c++ - 以固定长度打印二进制整数

转载 作者:行者123 更新时间:2023-11-30 05:45:07 29 4
gpt4 key购买 nike

我重载了 <<打印自定义对象(在本例中为自定义类的实例 Vertex )。作为其中的一部分,我想以二进制形式打印给定的整数。出于多种原因,我更喜欢 std::bitset而不是运行 for 循环,但我遇到的问题是我有一个特定的大小,每个二进制文件应该取决于实例。这是片段:

std::ostream &
operator<< (std::ostream& os, const Vertex& V) {
os << "(" << std::bitset<4>(V.signature()) << ") :";
for (int e=2; e<V.degree(); ++e) {
os << " [" << e << "]=" << V.neighbor(e) << " ";
}
return os;
}

代替 4 ,我真的很想放一个size_t这取决于 V .例如,这是我尝试过的:

std::ostream &
operator<< (std::ostream& os, const Vertex& V) {
size_t B = V.degree()-1;
os << "(" << std::bitset<B>(V.signature()) << ") :";
for (int e=2; e<V.degree(); ++e) {
os << " [" << e << "]=" << V.neighbor(e) << " ";
}
return os;
}

错误显示为“非类型模板参数不是常量表达式”。有没有办法在不对参数进行硬编码的情况下解决这个问题?这不是在编译时就会知道的东西。

最佳答案

一个简单的函数怎么样:

string bin_format(int_type value, size_t len);

然后您使用它写入流

out << bin_format(v.signature(), v.degree()-1);

超出此范围的任何内容都违反了 KISS 原则,需要仔细证明其合理性。例如。如果你设法经常重复 string 中的动态分配导致问题,您可以编写一个函数获取流和参数并将单个位写入流,或者您可以返回一个具有重载 operator<< 的代理。该运算符(operator)在哪里进行格式化和流式传输。顺便说一句,您还可以将该函数转换为基于整数类型的模板,这样您至少可以在所需的位数上设置最大值。

关于c++ - 以固定长度打印二进制整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29499616/

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