如何获取以下内容以将参数包元素的索引放入元组中?
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)委托(delegate)构造函数
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 替代品。
关于c++ - 如何获取参数包中元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49058194/