gpt4 book ai didi

c++ - 传递动态模板参数

转载 作者:行者123 更新时间:2023-11-28 03:28:01 26 4
gpt4 key购买 nike

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

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

我想我无法做到这一点……有什么解决方法吗?

最佳答案

模板是一种编译时特性,而不是运行时特性。如果您要支持的不同大小的数量有限,例如,因为您支持 8、16 和 32 位,您可以切换并委托(delegate):

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

顺便说一句,don't use std::endl .如果您真的想刷新流,请使用 std::flush

关于c++ - 传递动态模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13425949/

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