【发布时间】:2019-09-22 14:39:34
【问题描述】:
创建一个名为 reversed_binary_value 的模板函数。它必须采用任意数量的布尔值作为模板参数。这些布尔值以相反的顺序表示二进制数字。您的函数必须返回一个与布尔值表示的数字的二进制值相对应的整数。例如: reversed_binary_value() 应该返回。
这就是问题所在,我就这样解决了。
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 ?
【问题讨论】:
-
为什么
sum必须通过template值接受它的参数?这在您当前的方法中是不可能的,因为它需要reversed_binary_value能够在编译时进行评估,但是创建std::vector使得按照当前标准不可能。 -
您遗漏了问题陈述的结尾。
-
我知道那样做是不可能的。我想知道我怎样才能实现功能
int reversed_binary_value()成为可能。 -
但是.. 这就是任务。你应该考虑一下并解决它????不仅仅是让我们为您提供解决方案...
-
设为
constexpr并且不要使用任何堆分配,因为目前在constexpr上下文中不允许这样做。
标签: c++