运行期以索引获取tuple元素-C++14
在编译期很容易根据索引来获取对应位置的元素,因为 tuple 的帮助函数 std::get<N>(tp) 就能获取 tuple 中第 N 个元素。然而我们却不能直接在运行期通过变量来获取 tuple 中的元素值,比如下面的用法:
; std::get<i>(tp);
这样写是不合法的,会报一个需要编译期常量的错误。 要通过运行时的变最米获取 tuple 中的元素值,需要采取一些替代手法,将运行期变量“映射”为编译期常量。
下面是基于C++14实现的,运行期以索引获取tuple元素的方法。需支持C++14及以上标准的编译器,VS2017 15.5.x、CodeBlocks 16.01 gcc 7.2。
//运行期以索引获取tuple元素-C++14
//需支持C++14及以上标准的编译器,VS2017 15.5.x、CodeBlocks 16.01 gcc 7.2
//自编
#include <iostream>
#include <tuple>
#include <utility> //index_sequence
using namespace std;
template <typename Tuple>
void visit3(size_t i, Tuple& tup, index_sequence<>)
{
}
template <typename Tuple, size_t... Idx>
void visit3(size_t i, Tuple& tp, index_sequence<Idx...>)
{
constexpr size_t I = index_sequence<Idx...>::size() - ;
if (i == I)
cout << get<I>(tp) << endl;
visit3(i, tp, make_index_sequence<I>{});
}
template <typename Tuple>
void visit_help(size_t i, Tuple& tp)
{
visit3(i, tp, make_index_sequence<tuple_size<Tuple>::value>{});
}
int main()
{
auto tp = make_tuple(, "The test", true);
;
visit_help(i, tp);
;
}
运行期以索引获取tuple元素-C++14的更多相关文章
- 运行期以索引获取tuple元素-C++14(原创)
在编译期很容易根据索引来获取对应位置的元素,因为 tuple 的帮助函数 std::get<N>(tp) 就能获取 tuple 中第 N 个元素.然而我们却不能直接在运行期通过变量来获取 ...
- 运行期以索引获取tuple元素-C++17
//运行期以索引获取tuple元素-C++17 //需支持C++17及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见:http://purec ...
- 运行期以索引获取tuple元素-C++11之2
//运行期以索引获取tuple元素-C++11之2 //需支持C++11及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见<深入应用C++ ...
- 运行期以索引获取tuple元素-C++11之1
//运行期以索引获取tuple元素-C++11之1 //需支持C++11及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见<深入应用C++ ...
- Knockout获取数组元素索引的2种方法,在MVC中实现
原文:Knockout获取数组元素索引的2种方法,在MVC中实现 在遍历数组.集合的时候,通常要获取元素的索引,本篇体验使用Knockout获取索引的2种方法. 假设有这样的一个模型: namespa ...
- 获取某个元素第一次出现在数组(json数组)的索引
function firstIndex(arr, text) { // 若元素不存在在数组中返回-1 let firstVal = -1; for (let i = 0; i < arr.len ...
- python中len 小练习:获取并输出集合中的索引及对应元素
len()用来获取长度.字节等数值 1 a = ["hello", "world", "dlrb"] 2 b = len(a) 3 for ...
- jquery通过索引获取元素
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- JIT晚期(运行期)
在部分的商用虚拟机(Sun HotSpot.IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为& ...
随机推荐
- HDU Today
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- Circle
Circle Memory Limit: 32768KB 64bit IO Format: %lld & %llu Status Description Your task is so ...
- 2016年中国大学生程序设计竞赛(杭州)1006 Four Operations
Four Operations Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 【Aladdin Unity3D Shader编程】之三 光照模型(二)
高光反射模型 Specular=直射光*pow(cosθ,高光的参数) θ:是反射光和视野方向的夹角 编写高光反射Shader Shader "AladdinShader/07 Specul ...
- [转]移动前端开发之viewport的深入理解
今天去面试,被问到一个用了一万次的东西,然而我并不了解具体是个毛毛,看这一篇豁然开朗. DevicePixelRatio 以及这句话:移动设备上的viewport分为layout viewport ...
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller //控制类 service //服务接口 service.impl //服务 ...
- DevExpress.XtraEditors.TextEdit 设为密码输入框
DevExpress.XtraEditors.TextEdit 设为密码输入框,解决办法: 设计窗口-->属性Properties-->Mask节点-->PasswordChar输入 ...
- nginx-http-concat资源文件合并模块
网页中引入多个CSS和JS的时候,浏览器会发出很多(css个数+js个数)次网络请求,甚至有的网页中有数十个以上的CSS或JS文件,用户体验特别不好,正好可以利用nginx-http-concat n ...
- SQL 数据操作(实验六)
SQL 数据操作 emp.dept 目标表结构及数据 INSERT 命令的使用与结果验证 2.1把一名新来雇员信息插入到EMP表中:雇员号:1011 姓名: 王晓明 入职日期:今天 ```insert ...
- TIJ学习总结(1)- Java基础语法
TIJ(Thinking in Java)作为Java学习书籍里的"圣经",之前花两个月系统的捋了一遍,很多东西有种豁然开朗的感觉,入门之后读一遍TIJ,相信会有很多意外收获哦- ...