首页 > 解决方案 > 二进制反转为十进制数

问题描述

创建一个名为 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 ?

标签: c++

解决方案


您可以使用递归方法:

#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 :)


推荐阅读