C++11 —— 判断 tuple 中是否包含某个数据类型

??如标题所提到的,这个问题也让我烦恼了一会,前两天在某个论坛上(现在找不到出处了)看到有如下代码的解决办法,非常巧妙,在此整理并记录出来做备忘。

#include <type_traits>
#include <tuple>
#include <iostream>

/**
 * @struct X_check
 * @brief  协助 X_tuple_has_type() 进行类型检查。
 */
template< bool... >
struct X_type_check
{

};

/**
 * @brief 判断 tuple 对象内是否包含某个数据类型。
 *
 * @param[in ] _Fy    : 待判断的数据类型。
 * @param[in ] _Ty... : tuple 的参数列表。
 *
 */
template< typename _Fy, typename... _Ty >
constexpr bool X_tuple_has_type(const std::tuple< _Ty... > &)
{
    return !std::is_same< X_type_check< false, std::is_same< _Fy, _Ty >::value... >,
                          X_type_check< std::is_same< _Fy, _Ty >::value..., false > >::value;
}

int main(int argc, char * argv[])
{
    std::cout << std::boolalpha;
    std::cout << X_tuple_has_type< int    >(std::tuple< int, char, double >{ 100, ‘a‘, 3.1415926 }) << std::endl;
    std::cout << X_tuple_has_type< char   >(std::tuple< int, char, double >{ 100, ‘a‘, 3.1415926 }) << std::endl;
    std::cout << X_tuple_has_type< double >(std::tuple< int, char, double >{ 100, ‘a‘, 3.1415926 }) << std::endl;
    std::cout << X_tuple_has_type< float  >(std::tuple< int, char, double >{ 100, ‘a‘, 3.1415926 }) << std::endl;
    std::cout << X_tuple_has_type< void   >(std::tuple< int, char, double >{ 100, ‘a‘, 3.1415926 }) << std::endl;

    return 0;
}

原文地址:https://www.cnblogs.com/VxGaaagaa/p/10128279.html

时间: 2024-10-11 06:06:25

C++11 —— 判断 tuple 中是否包含某个数据类型的相关文章

C++11 —— 统计 tuple 中指定数据类型的数量

问题背景 ??在实现可变参数列表中的类型统计功能前,我们先看看下面代码中的需求场景: /** * @struct x_selector_t< size_t > * @brief 协助 make_task() 接口的特化选择功能的辅助类. */ template< size_t > struct x_selector_t { }; /** * @brief xtuple 参数列表中未包含指定数据类型的时候,创建 x_task_A_t 对象. */ template< typen

node js 判断数组中是否包含某个值

判断数组中是否包含某个值这里有四种方法.用的测试数据: let arr=["a","b","c"]; let arr2={"a":"aaa","b":"bbb","c":"ccc"}; in判断是否在数组的key里in操作符针对的是key,而非value.而对于普通的一维数组来说,key是隐藏的.所以,对于判断某个数组中是否含有

PHP判断字符串中是否包含指定字符串,支持中文哦

RT,随手写的 1 /** 2 * 判断字符串中是否包含指定字符串 3 * @var source 源字符串 4 * @var target 要判断的是否包含的字符串 5 * @return bool 6 */ 7 function hasstring($source,$target){ 8 preg_match_all("/$target/sim", $source, $strResult, PREG_PATTERN_ORDER); 9 return !empty($strResul

判断DataReader中是否包含某个字段

利用DataReader的GetName()方法,可以获取字段名称 for (int i=0; i<dataReader.FieldCount; i++) { //判断是否含有fieldName字段 if(dataReader[i].GetName().Equals(fieldName); } 判断DataReader中是否包含某个字段,布布扣,bubuko.com

数据库中判断内容中是否包含中文

SQL Server 用patindex()函数判断,例如'patindex(%[吖-做]%',字段名)>0 Oracle 用lengthb()和length()函数求字段对应内容的的长度,长度不一样则说明内容中包含汉字 数据库中判断内容中是否包含中文,布布扣,bubuko.com

java判断字符串中是否包含汉字

原文:java判断字符串中是否包含汉字 源代码下载地址:http://www.zuidaima.com/share/1550463517428736.htm package com.zuidaima.util; /** *@author www.zuidaima.com **/ public class test { public static void main(String[] args) { String a = "中国China"; for (int i=a.length();

判断字符串中是否包含中文

public bool CheckChinese(string str) { bool flag = false; UnicodeEncoding a = new UnicodeEncoding(); byte[] b = a.GetBytes(str); for(int i=0;i<b.Length;i++) { i++; if (b[i] != 0) { flag = true; } else { flag = false; } } return flag; }这段代码为什么能实现判断是否为

java判断字符串中是否包含字母

1.java代码判断字符串中是否包含字母: 思路:使用正则表达式的来验证 1.1示例代码如下: /** * 该方法主要使用正则表达式来判断字符串中是否包含字母 * @author fenggaopan 2015年7月21日 上午9:49:40 * @param cardNum 待检验的原始卡号 * @return 返回是否包含 */ public boolean judgeContainsStr(String cardNum) { String regex=".*[a-zA-Z]+.*"

sqlite 判断表中是否包含 某个字段

数据库 都有一个 根表..(我的理解) 也就是 你创建了一个数据库 里面就带有 一个表 sqlite_master 字段有 type , name  , tbl_name , rootpage ,sql . 可以执行 sql select * from sqlite_master  查看. sql 就是你创建表时 的create 语句. 根据返回的sql 语句判断是否包含 某个字段 sqlite 判断表中是否包含 某个字段