C++26 在使模板参数包更符合人体工程学方面取得了一些进展。例如,P2662:包索引已被纳入标准。 有了这个和其他相关的提案,最简单的
tuple
实现是什么?
我正在设想以下内容:
template <typename... T>
struct tuple {
T... m;
};
tuple<int, float> tup{};
float f = tup.m[1];
可以写这样的东西吗?如果不完全符合这个语法,那么怎么办?如果根本没有,那么缺少哪些建议来实现这一目标?
给你:
#include <iostream>
#include <utility>
template <typename ...P>
auto make_my_tuple(P &&... args)
{
return [...args = std::forward<P>(args)]<std::size_t I> -> auto &&
{
return args...[I];
};
}
int main()
{
auto t = make_my_tuple(1, 2.2f, 3.3);
std::cout << t.operator()<1>() << '\n'; // Like `get<1>()`.
}
显然我是半开玩笑的。但是您可以创建一个模板类来包装此类 lambda 并为它们提供一个不错的接口。