如何获取参数包中元素的索引
How do I get index of elements in parameter pack
如何获得以下内容以将参数包元素的索引放在元组中?
template< typename... Ts >
class ClassA {
public:
ClassA( Ts... ts ) : tup( make_tuple( ts, 0 )... ) {}
// I would like it to expand to this.
// ClassA( T0 ts0, T1 ts1 ) : tup( make_tuple( ts0, 0 ), make_tuple(ts1, 1) ) {}
tuple<tuple<Ts, size_t>...> tup;
};
void main() {
vector<int> a ={ 2, 4, 5 };
list<double> b ={ 1.1, 2.2, 3.3 };
ClassA<vector<int>, list<double>, vector<int>, list<double>> mm( a, b, a, b );
}
谢谢。
在我看来
(如果您至少可以使用 C++14(委托构造函数的工作
template <typename ... Ts>
class ClassA
{
private:
template <std::size_t ... Is>
ClassA (std::index_sequence<Is...> const &, Ts ... ts)
: tup { std::make_tuple(ts, Is) ... }
{ }
public:
ClassA (Ts ... ts)
: ClassA(std::make_index_sequence<sizeof...(Ts)>{}, ts...)
{ }
std::tuple<std::tuple<Ts, std::size_t>...> tup;
};
在 C++11 中,这不起作用,因为std::index_sequence
和std::make_index_sequence
仅从 C++14 开始可用,但不难找到(或开发(C++11 替代品。
您可以通过简单地增加整数作为包扩展的一部分来避免使构造函数成为模板和索引序列:
template <typename ... Ts>
class ClassA
{
private:
ClassA (size_t i, Ts ... ts)
: tup { std::make_tuple(ts, i++) ... }
{ }
public:
ClassA (Ts ... ts)
: ClassA(0, ts...)
{ }
std::tuple<std::tuple<Ts, size_t>...> tup;
};
我应该注意 gcc 目前正在向我发出关于缺少序列点的警告,但这似乎是一个误报(无论如何,这可以通过编写一个小函数并调用它来轻松修复(。
相关文章:
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- AcquireCredentialsHandleA() 返回 PFX 文件的0x8009030e(安全包中没有可用的凭据
- MSYS2 MinGW程序包中缺少grpc_cpp_plugin协议
- 参数包中的筛选器类型
- 如何正确实现容器类中元素的更改?
- 实例化模板时,我是否必须显式显示参数包中的类型?
- R 包中的 TMB c++ 代码和 CRAN 检查
- C++线性搜索算法,确定数组中元素的数量
- Deque 中元素的随机访问如何提供恒定的时间复杂度?
- C++ 在可变参数模板的参数包中并集参数?
- 如何检测参数包中的uint8_t类型
- 获取结构 c++ 中元素的索引
- 如何在 C# 中将带有参数的函数绑定到包中
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 这种获取模板参数包中最后一个元素的方法是否有隐藏的开销?
- 如何获取参数包中元素的索引
- 对参数包中的每个元素应用函数
- 以错误的顺序将函数应用于参数包中的每个元素
- 如何在基于范围的for循环中很好地解包unordered_map元素