[英]Binary reversed to decimal number
创建一个名为 reversed_binary_value 的模板 function。 它必须采用任意数量的布尔值作为模板参数。 这些布尔值以相反的顺序表示二进制数字。 您的 function 必须返回一个 integer 对应于布尔值表示的数字的二进制值。 例如: 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>()>();
}
我正在尝试调用 function sum 但我收到此错误:调用非 constexpr function 'int reversed_binary_value()。 我知道不是编译时指令。 我的问题是,我怎样才能调用 function 总和?
您可以使用递归方法:
#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
}
这允许您为二进制 function(无循环)添加constexpr
,并允许模板调用求和所需的常量传播:)
reversed_binary_value()
的结果不能用作模板参数,因为它不是在编译时确定的(它需要是一个constexpr
,但不能是当前定义的那个)。 与其将sum()
定义为模板 function,不如将其设为常规 function,将 integer 作为参数:
void sum(int N)
{
std::cout << "Number is: " << N;
}
int main()
{
std::cout << reversed_binary_value<1,0,0,0,1,1>() << std::endl;
sum(reversed_binary_value<1,0,0,0,1,1>());
}
另外一件事:您可以使用位移,而不是依赖pow()
function 来计算 2 的幂,如下所示:
result += vec[i] * (1u << i);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.