【发布时间】:2020-11-30 18:34:49
【问题描述】:
我正在尝试制作一个带有数字的“元组生成器”,并且 返回具有此数字的元组,同时它的每个元素都递增 一个。当然我知道这不是元组的真正应用, 但我想尝试它来学习新东西。这是我所拥有的:
template<int N>
auto getTupleN(int start){
return std::tuple_cat(std::tuple<int>(start), getTupleN<N-1>(start+1));
}
template<>
auto getTupleN<0>(int start){
return std::make_tuple(start);
}
现在,它运行良好,我可以使用 std::get 访问元组的元素。 但是,我无法推断出类型。
我想用箭头符号写一个函数来确保函数 返回我希望它返回的内容,并且我很好地掌握了模板的概念。 这是我想要的(当然,由于各种原因,它不起作用):
template<int N>
// error: ‘getTupleN’ was not declared in this scope
auto getTupleN(int start) -> decltype(std::tuple_cat(std::tuple<int>, getTupleN<N-1>)){
return std::tuple_cat(std::tuple<int>(start), getTupleN<N-1>(start+1));
}
template<>
// error: expected initializer before ‘<’ token
auto getTupleN<0>(int start) -> std::tuple<int>{
return std::make_tuple(start);
}
我认为现在应该可以理解我的问题是什么了 - 我怎样才能重写这个定义以便它使用箭头符号,所以我确定它返回我想要的?
编辑。 所以我使用了第一个答案的想法,我得到的错误是:
error: ‘getTupleN’ was not declared in this scope
auto getTupleN(int start) -> decltype(std::tuple_cat(std::tuple<int>(start), getTupleN<N-1>(start+1))){
error: expected initializer before ‘<’ token
auto getTupleN<0>(int start) -> std::tuple<int>{
【问题讨论】:
-
当它不是“当然”时,请不要说“当然”。最好在问题中包含错误消息
-
@idclev463035818 好的,我已经编辑了问题
-
您添加的是对答案的回应,这也许应该是对该答案的评论。我要求包括您的代码错误。您当前有一些没有错误消息的代码和没有相应代码的错误消息。有点混乱
-
@idclev463035818 错误信息下方显示对应代码
-
该错误消息下面的行是不完整的代码。
标签: c++ templates variadic-templates variadic-functions