c++ - std::index_sequence_for 如何() 到底有没有用?
问题描述
我有以下代码
#include<iostream>
#include <tuple>
#include<utility>
using namespace std::literals::string_literals;
template< typename tupleType, size_t ... inds >
void printTupleH(const tupleType& tuple, std::index_sequence<inds ...>){
((std::cout << std::get<inds>(tuple) << " "), ..., (std::cout << "\n"));
}
template< typename ... tupleElementsTypes>
void printTuple(const std::tuple<tupleElementsTypes ...>& tuple){
printTupleH< std::tuple<tupleElementsTypes ...>, std::index_sequence_for<tupleElementsTypes... >() >(tuple, std::index_sequence_for<tupleElementsTypes...>() );
}
int main() {
auto myTuple{std::make_tuple(1, 0.5, "erfevev"s, "dsfgsfgsf",'g',true,0x44,999999999999999999,9.999999999)};
printTuple(myTuple);
}
我不知道这有什么问题
printTupleH< std::tuple<tupleElementsTypes ...>, std::index_sequence_for<tupleElementsTypes... >() > As the IDE says.
当我在没有任何模板参数的情况下离开函数调用时,推论效果很好。
我所知道的是std::index_sequence_for<tupleElementsTypes... >()
应该扩展到0,1,2,..N-1
. 那么有什么问题。
解决方案
printTupleH
的模板定义需要一个std::size_t
. std::index_sequence_for
创建一个std::integer_sequence
(更准确地说是 a std::index_sequence
,它只是 的整数序列的别名std::size_t
),而不是大小列表。
要显式添加推论,您需要手动提供一个 列表std::size_t
,每个索引一个 - 这首先破坏了使用索引序列的意义!它旨在与模板扣除一起使用。
推荐阅读
- node.js - 如何在 Node JS 中调试 ssl 日志
- reactjs - 创建反应应用程序 - 如何将 pdf.worker.js 文件从 pdfjs-dist/build 复制到项目的输出文件夹?
- google-apps-script - Googel Apps 脚本测试部署 - “很抱歉,发生服务器错误。请稍候,然后重试。”
- php - 如何在输入类型按钮中有日期选择器值?
- asp.net-core - 本地化适用于数据注释和视图,但不适用于身份页面 ASP.NET Core MVC 3.1
- java - 有没有办法让它更快更通用地做这个问题?
- html - 使用 URL 插入数据
- json - 解析 JSON 返回 EOF
- spring - 如何在不编写主要方法的情况下自启动 Spring 应用程序?
- python - 导入 .csv 文件时,在另一个列表中查找和计算一个列表的元素不起作用