错误:无法从"元组<[...]、std::__1::元组<无符号长长、无符号长长>>"到"常量元组<[...],uint_type>"的可行转换
error: no viable conversion from 'tuple<[...], std::__1::tuple<unsigned long long, unsigned long long>>' to 'const tuple<[...], uint_type>'
我正在尝试使用 unsinged long long
tuple
实现ackerman函数这是我要创建的台词
A(m, n) = A(m - 1, A(m, n - 1))
所以这是我的代码:
uint_type calculate(tuple_type const& args) const {
uint_type retval;
uint_type retval;
auto second = make_tuple(m - 1, calculate(make_tuple(m, n - 1)));
auto first = make_tuple(m - 1, second);
retval = calculate(first);
return retval;
}
};
这是错误:
错误:没有可行的'tuple&lt; [...]的可行转换 std :: __ 1 :: tuple>'to'const 元组&lt; [...],uint_type>' retval =计算(firstTuple);
^~~~~~~~~~~~
如果您使用大量auto
和模板功能(例如make_tuple
),有时很难找到类型错误。这是您少使用auto
和make_tuple
的写作方式:
uint_type calculate(tuple_type const& args) const {
const uint_type m = get<0>(args);
const uint_type n = get<1>(args);
uint_type retval;
tuple_type second{m - 1, calculate(tuple_type{m, n - 1})};
tuple_type first{m - 1, second};
// ^^^^^^ error
retval = calculate(first);
return retval;
}
您可以看到如何添加夫妇类型注释将错误消息完全移动到错误的位置。
但是,这不是ackermann函数。这是Ackermann功能:
uint_type calculate(tuple_type args) const {
const uint_type m = get<0>(args);
const uint_type n = get<1>(args);
if (m == 0)
return n + 1;
if (n == 0)
return calculate(tuple_type{m - 1, 1});
return calculate(tuple_type{m - 1, calculate(tuple_type{m, n - 1})});
}
请注意,可以省略tuple_type
:
uint_type calculate(tuple_type args) const {
const uint_type m = get<0>(args);
const uint_type n = get<1>(args);
if (m == 0)
return n + 1;
if (n == 0)
return calculate({m - 1, 1});
return calculate({m - 1, calculate({m, n - 1})});
}
相关文章:
- C++:TypeDef使用元组
- Pybind11:将元组列表从Python传递到C++
- 重载元组索引运算符-C++
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将fold表达式与std::一起用于两个元组
- std::ranges::elements_view,用于自定义类似元组的数据
- 将元组的向量转换/构造为堆
- 专用于 std 元组的模板,而无需用户执行remove_cvref
- 将元组的向量构造成堆
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 类内部和外部静态 constexpr 元组之间的差异
- 可变参数模板与使用元组在参数中添加不同的数据对
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- boost::包含提升单元的元组的哈希值
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 如何在可变参数模板函数中遍历可变参数元组?
- 如何使用 SML 随机生成八进制元组
- 过载输出<<用于类的运算符,以打印其中的元组