C++ 传递动态模板参数

C++ 传递动态模板参数,c++,templates,C++,Templates,我正在试验模板,并编写了以下简单的类方法: void Decimal::toBinary(size_t bits) { // decimalNumber being a class private variable (long double) std::bitset< bits > result(decimalNumber); std::cout << result << std::endl; } 然而,我越来越 src/decim

我正在试验模板,并编写了以下简单的类方法:

void Decimal::toBinary(size_t bits) {
    // decimalNumber being a class private variable (long double)
    std::bitset< bits > result(decimalNumber);

    std::cout << result << std::endl;
}
然而,我越来越

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

我想我不能这么做。。。任何解决方法?

模板都是编译时功能,而不是运行时功能。如果您要支持的不同大小的数量有限,例如,因为您支持8、16和32位,您可以
切换
并委派:

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;
    }
}
模板
void Decimal::toBinary(){
std::位集<位>结果(小数);
std::cout();break;
案例16:此->toBinary();中断;
案例32:此->toBinary();中断;
}
}

顺便说一句。如果您真的想刷新流,请使用
std::flush

,具体取决于
decimalNumber
是什么类型,您可能只需要拥有足够长的
std::bitset
,它就可以保存所有信息。decimalNumber是长双倍的,您无法“传递动态模板参数”。这些都需要在编译时知道。有没有试过将“bits”转换为“const”?@LucasHoepner:这一点都没有帮助。
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;
    }
}