//运行期以索引获取tuple元素-C++17
//需支持C++17及以上标准的编译器,VS2017 15.5.x、CodeBlocks 16.01 gcc 7.2
//参见:http://purecpp.org/?p=1581

#include <iostream>
#include <tuple>
using namespace std;

template <size_t Idx, typename T>
void visit(T& tup, size_t i)
{
    if (i == Idx)
        cout << get<Idx>(tup) << endl;
}

//template <typename Tuple, size_t... Idx>
//void visit(size_t i, Tuple& tp, index_sequence<Idx...>)
//{
//    (visit<Idx>(tp, i), ...);
//}

template <class Tuple, size_t...Idx>
void visit1(size_t i, Tuple& tp, index_sequence<Idx...>)
{
    ((i == Idx && (visit<Idx>(tp, i), false)), ...);
}

template <typename Tuple>
void visit_help(size_t i, Tuple& tp)
{
    //visit(i, tp, make_index_sequence<tuple_size<Tuple>::value>{});
    visit1(i, tp, make_index_sequence<tuple_size<Tuple>::value>{});
}

int main()
{
    auto tp = make_tuple(, "The test", true);
    ;
    visit_help(i, tp);  //The test

    ;
}

运行期以索引获取tuple元素-C++17的更多相关文章

  1. 运行期以索引获取tuple元素-C++14

    在编译期很容易根据索引来获取对应位置的元素,因为 tuple 的帮助函数 std::get<N>(tp) 就能获取 tuple 中第 N 个元素.然而我们却不能直接在运行期通过变量来获取 ...

  2. 运行期以索引获取tuple元素-C++11之2

    //运行期以索引获取tuple元素-C++11之2 //需支持C++11及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见<深入应用C++ ...

  3. 运行期以索引获取tuple元素-C++11之1

    //运行期以索引获取tuple元素-C++11之1 //需支持C++11及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见<深入应用C++ ...

  4. 运行期以索引获取tuple元素-C++14(原创)

    在编译期很容易根据索引来获取对应位置的元素,因为 tuple 的帮助函数 std::get<N>(tp) 就能获取 tuple 中第 N 个元素.然而我们却不能直接在运行期通过变量来获取 ...

  5. Knockout获取数组元素索引的2种方法,在MVC中实现

    原文:Knockout获取数组元素索引的2种方法,在MVC中实现 在遍历数组.集合的时候,通常要获取元素的索引,本篇体验使用Knockout获取索引的2种方法. 假设有这样的一个模型: namespa ...

  6. 获取某个元素第一次出现在数组(json数组)的索引

    function firstIndex(arr, text) { // 若元素不存在在数组中返回-1 let firstVal = -1; for (let i = 0; i < arr.len ...

  7. python中len 小练习:获取并输出集合中的索引及对应元素

    len()用来获取长度.字节等数值 1 a = ["hello", "world", "dlrb"] 2 b = len(a) 3 for ...

  8. jquery通过索引获取元素

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  9. JIT晚期(运行期)

    在部分的商用虚拟机(Sun HotSpot.IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为& ...

随机推荐

  1. AngularJS学习篇(十八)

    AngularJS API AngularJS 全局 API 用于执行常见任务的 JavaScript 函数集合,如: 比较对象 迭代对象 转换对象 全局 API 函数使用 angular 对象进行访 ...

  2. ⑿bootstrap组件 缩略图 警告框 进度条 基础案例

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  3. iOS字符串修改及运用

    //创建字符串 直接赋值 NSString *lytTest = @"A common string"; 1.获取字符串的长度 NSLog(@"%d",lytT ...

  4. weiapi 获取项目根目录

    无法使用: Server.Map("~"); Server.Map("~/"); Server.Map("./"); Server.Map( ...

  5. word建立统一的表格样式

    插入一个表格,一般border都是一样粗细,不美观, 这里推荐一种样式如下图(外框和首行都加粗,比较好看) 设置方法: 1.选中表格,上方出现设计选项卡 2.表格样式,点击"新建样式表&qu ...

  6. Spring MVC体系结构和处理请求控制器

    Spring MVC体系结构和处理请求控制器 一:MVC设计模式: (1.)数据访问接口:DAO层 (2.)处理业务逻辑层:Service层 (3.)数据实体:POJO (4.)负责前段请求接受并处理 ...

  7. YII2 models非常好用的控制输出数据【重写Fields】

    models里重写Fields真的很好用,用于分类.评论功能 列子:评论表models/Comment.php 1.关联商品表 2.获取父级(即管理员)评论 public function Field ...

  8. alex python of day1

    Print("hello word!")#打印hello word!向python世界发生第一声呐喊,仪式很重要 定义变量 name="Alex Li" nam ...

  9. 重启mysql主从同步mongodb(tungsten-replicator)

    1. 连接mysql mysql -uroot -p;(mysql从库) 输入数据库密码 2. 停止主同步 mysql> stop slave; 3. 清数据 将mongo库数据清空 4. 杀主 ...

  10. 1)C语言简介(C自考学习)

    C语言历史由来 世界上第一个高级语言是"ALFOL",而C的前身是ALGOL语言.1970年美国贝尔实验室的肯·汤普逊对BCPL(基本复合程序设计语言)进行了进一步的简化,突出了硬 ...