我正在尝试编写一个函数,以std::tuple
。的形式返回可变参数包装的子集。理想情况下,该函数应该没有运行时开销(没有不必要的副本),并且应该允许用户访问lvalue
引用并进行修改。
值类型,lvalue
引用和const lvalue
引用应得到维护。临时对象(rvalue
引用)应“转换”为值类型,以避免创建无效的引用(临时对象的引用)。
预期结果示例:
int lr = 5;
const int& clr = lr;
auto t = make_subpack_tuple(lr, clr, 5);
static_assert(is_same
<
decltype(t),
std::tuple<int&, const int&, int>
>{}, "");
// Ok, modifies lr:
std::get<0>(t) = 10;
// Compile-time error, intended:
// std::get<1>(t) = 20;
// Ok, 5 was moved into the tuple:
std::get<2>(t) = 30;
示例不完整的实现:
template<typename... Ts>
auto make_subpack_tuple(Ts&&... xs)
{
return std::tuple
<
some_type_trait<decltype(xs)>...
>
(
std::forward<decltype(xs)>(xs)...
);
}
我想做的事有意义吗?
是否可以使用标准的标准特征some_type_trait
?还是应该实施自己的解决方案?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句