我正在尝试使用模板,我编写了这个简单的类方法:
void Decimal::toBinary(size_t bits) {
// decimalNumber being a class private variable (long double)
std::bitset< bits > result(decimalNumber);
std::cout << result << std::endl;
}
我正在尝试将size_t bits
函数参数传递给bitset模板。
根据C++ Bitset Reference,实现确实需要一个size_t参数:
template < size_t N > class bitset;
然而,我正在
src/decimal.cc:11: error: ‘bits’ cannot appear in a constant-expression
src/decimal.cc:11: error: template argument 1 is invalid
src/decimal.cc:11: error: invalid type in declaration before ‘(’ token
我想我无法做到这一点......任何解决方法?
答案 0 :(得分:2)
模板是编译时功能,而不是运行时功能。如果您要支持的不同大小的数量有限,例如,因为您支持8位,16位和32位,则可以switch
并委托:
template <size_t bits>
void Decimal::toBinary() {
std::bitset< bits > result(decimalNumber);
std::cout << result << '\n';
}
void Decimal::toBinary(size_t bits) {
switch (bits) {
default: throw std::runtime_error("number of bits not supprted");
case 8: this->toBinary< 8>(); break;
case 16: this->toBinary<16>(); break;
case 32: this->toBinary<32>(); break;
}
}
BTW,don't use std::endl
。如果您真的想要使用std::flush
来刷新流。