我正在重载<<
以打印自定义对象(在本例中为自定义类的实例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;
}
错误为“非类型模板参数不是常量表达式”。有没有办法在不对参数进行硬编码的情况下解决这个问题?这不是在编译时会知道的。