为什么此元组到引用元组 (std::tie) 转换有效?
Why is this tuple to tuple-of-references (std::tie) conversion valid?
我正在制作一个类"std::tie-able"。 该类充当临时对象,根据分配给它的类型提取值。
这对于分配给元组的实现是显而易见的:
// temporary class conversion operator
template<typename... T>
operator std::tuple<T...>() {
return fetch_values<T...>(); // returns tuple<T...>
}
// usage:
std::tuple<int, int> = get_temporary();
但是,该类也应该能够与 std::tie 一起使用。
int a, b;
std::tie(a, b) = get_temporary();
fetch_values需要值类型参数,因此上述内容需要更改,因为 tie 会导致 T... 成为引用类型。为了实现这一点,我最终得到了一种转换为引用元组的附加方法:
template<typename... T>
operator std::tuple<T&...>() {
auto result = fetch_values<T...>(); // returns tuple<T...>
return result;
}
这确实可以编译和工作,但我有几个问题:
它仅在将fetch_values结果存储在
result
中,然后再返回时进行编译。写入return fetch_values<T...>()
时,编译失败并显示no viable conversion from returned value of type tuple<T, T> to function return type tuple<T&, T&>
.为什么此解决方法有效?这首先有效吗?
result
值存储在std::tie
变量中之前是否存活足够长?
显示问题的示例
您的两个代码段都返回悬空指针。
您应该简单地按值返回:
// temporary class conversion operator
template<typename... T>
operator std::tuple<T...>() const {
return fetch_values<T...>(); // returns tuple<T...>
}
使用std::tie
进行转换将起作用。
相关文章:
- C++:TypeDef使用元组
- Pybind11:将元组列表从Python传递到C++
- 重载元组索引运算符-C++
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将fold表达式与std::一起用于两个元组
- std::ranges::elements_view,用于自定义类似元组的数据
- 将元组的向量转换/构造为堆
- 专用于 std 元组的模板,而无需用户执行remove_cvref
- 将元组的向量构造成堆
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 类内部和外部静态 constexpr 元组之间的差异
- 可变参数模板与使用元组在参数中添加不同的数据对
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- 为什么此元组到引用元组 (std::tie) 转换有效?
- 使用标准库在 c++11 中使用 std::tie 提取嵌套在元组中的元组
- std::tie 和元组中返回的对象的生存期
- 分配给 std::tie 和引用元组有什么区别
- 通过'元组'和'tie',一个好主意