传递动态模板参数
Passing dynamic template arguments
我正在试验模板,我写了这个简单的类方法:
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
函数参数传递给位集模板。
根据C++位集参考,实现确实需要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 位,您可以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
.
相关文章:
- C++基于输入参数的动态代码生成
- 我可以动态创建新地图并作为函数参数传递吗?
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 将数组动态分配到具有指针参数的函数中
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- 传递给函数的模板化参数的动态大小数组
- 如何在 C++11 中创建具有命令行参数大小的动态数组?
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 动态构建模板参数包
- 在为 Java 编译动态链接文件时,我应该选择哪些 g++ 参数
- 动态创建和扩展STD ::元组为参数包
- 如何在不动态铸造的情况下使用派生的参数
- 如何动态执行具有任意参数类型的函数指针
- 在C 中解开包装的类似Python的动态参数
- 将动态创建的数组作为参数传递
- 如何使用一些参数初始化动态分配的数组中的对象
- 为 C 绑定创建动态以 null 结尾的参数
- C++ CPP 使用参数动态调用 DLL
- 用CPP中的参数动态调用外部DLL