c++ - 二进制反转为十进制数
问题描述
创建一个名为 reversed_binary_value 的模板函数。它必须采用任意数量的布尔值作为模板参数。这些布尔值以相反的顺序表示二进制数字。您的函数必须返回一个与布尔值表示的数字的二进制值相对应的整数。例如: reversed_binary_value<0,0,1>() 应该返回。
这就是问题所在,我以这种方式解决了。
template<bool...digits>
int reversed_binary_value()
{
vector<bool> vec = {digits...};
int result = 0;
for(int i = 0; i < vec.size(); i++)
result += pow(2 * vec[i], i);
return result;
}
template <int N>
void sum()
{
std::cout << "Number is: ";
}
int main()
{
std::cout << reversed_binary_value<1,0,0,0,1,1>();
//sum<reversed_binary_value<1,0,0,0,1,1>()>();
}
我正在尝试调用函数 sum,但出现此错误:调用非 constexpr 函数 'int reversed_binary_value()。我知道不是编译时指令。我的问题是,我怎样才能调用函数 sum ?
解决方案
您可以使用递归方法:
#include <iostream>
template <typename = void>
constexpr int binary() {
return 0;
}
template <bool d, bool...digits>
constexpr int binary() {
return d + 2 * binary<digits...>();
}
template <int N>
void sum() {
std::cout << N;
}
int main() {
sum<binary<1,0,1>()>(); // prints 5
}
这允许您添加constexpr
二进制函数(无循环),并允许模板调用所需的常量传播 sum :)
推荐阅读
- git - 如何忽略特定文件之外的所有文件(不要忽略)
- java - 如何获取包含的 FXML 的控制器?
- angular - Angular 7 ngx-intl-tel-input onBlur() 事件有什么解决方案吗?
- php - 有什么方法可以修复此代码以避免错误:每次为键 'PRIMARY' 重复条目 '1'
- popupwindow - 如何使用 userscript 和 tempmonkey 检索弹出窗口的 html 源代码
- reactjs - 创建并发布一个没有自己的 node_modules 的 node_modules 包
- javascript - 表格的颜色单元格
- javascript - Wordpress 无法保存特色图片
- node.js - Oracle DB 与 Node.js 的连接出现“错误:未设置模式用户名!尝试设置环境变量 NODE_ORACLEDB_USER。”
- java - PDF 立即打开和关闭