- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
让我们假设一个 std::tuple<some_types...>
给出。我想创建一个新的 std::tuple
其类型是在 [0, sizeof...(some_types) - 2]
中索引的类型.例如,假设起始元组是 std::tuple<int, double, bool>
.我想获得一个定义为 std::tuple<int, double>
的子元组.
我对可变参数模板很陌生。作为第一步,我尝试写一个 struct
负责存放不同类型的原件std::tuple
目的是创建一个新的同类元组(如 std::tuple<decltype(old_tuple)> new_tuple
)。
template<typename... types>
struct type_list;
template<typename T, typename... types>
struct type_list<T, types...> : public type_list<types...> {
typedef T type;
};
template<typename T>
struct type_list<T> {
typedef T type;
};
我想做的是:
std::tuple<type_list<bool, double, int>::type...> new_tuple // this won't work
下一步将是丢弃参数包中的最后一个元素。如何访问多个 type
存储在 type_list
中?以及如何丢弃其中的一些?
谢谢。
最佳答案
这里有一种方法可以直接解决您的问题。
template<unsigned...s> struct seq { typedef seq<s...> type; };
template<unsigned max, unsigned... s> struct make_seq:make_seq<max-1, max-1, s...> {};
template<unsigned...s> struct make_seq<0, s...>:seq<s...> {};
template<unsigned... s, typename Tuple>
auto extract_tuple( seq<s...>, Tuple& tup ) {
return std::make_tuple( std::get<s>(tup)... );
}
您可以按如下方式使用它:
std::tuple< int, double, bool > my_tup;
auto short_tup = extract_tuple( make_seq<2>(), my_tup );
auto skip_2nd = extract_tuple( seq<0,2>(), my_tup );
并使用decltype
如果您需要结果类型。
一个完全不同的方法是写append_type
, 它需要一个类型和一个 tuple<...>
, 并将该类型添加到末尾。然后添加到type_list
:
template<template<typename...>class target>
struct gather {
typedef typename type_list<types...>::template gather<target>::type parent_result;
typedef typename append< parent_result, T >::type type;
};
这为您提供了一种方法来累积 type_list
的类型进入持有template
的任意参数包.但这不是您的问题所必需的。
关于c++ - 从 std::tuple<some_types...> 开始创建子元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17854219/
我有一个需要 const some_type** 作为参数的函数(some_type 是一个结构体,该函数需要一个指向该类型数组的指针)。我声明了一个 some_type* 类型的局部变量,并对其进行
我有一个函数需要 const some_type** 作为参数(some_type 是一个结构,函数需要一个指向这种类型数组的指针).我声明了一个 some_type* 类型的局部变量,并对其进行了初
我有一个函数需要 const some_type** 作为参数(some_type 是一个结构,函数需要一个指向这种类型数组的指针).我声明了一个 some_type* 类型的局部变量,并对其进行了初
我有一个变量包装器,当底层变量通过这个包装器被修改时,它会发出变化信号,这样其他对象就可以监听变化。 它工作正常(即我可以在底层对象上分配、添加、减去、调用成员函数(尽管这些无法发出更改信号)等),但
在下面的例子中 template void foo() { const char* name = typeid(T).name(); std::cout (); 将打印“std::s
让我们假设一个 std::tuple给出。我想创建一个新的 std::tuple其类型是在 [0, sizeof...(some_types) - 2] 中索引的类型.例如,假设起始元组是 std::
第 1 行导致 error: conversion from ‘C’ to non-scalar type ‘C’ requested .我知道我可以把它写成第 2 行,但是我怎样才能使用 make_
令ss为std::stringstream。如何指定(ss #include namespace detail { template concept SameHelper = st
我是一名优秀的程序员,十分优秀!