0

我正在试验模板,我写了这个简单的类方法:

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

我想我无法做到这一点......任何解决方法?

4

1 回答 1

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;
    }
}

顺便说一句,不要使用std::endl. 如果您真的要刷新流,请使用std::flush.

于 2012-11-16T23:41:56.920 回答