我正在制作一个“std :: tie-able”类。 该类用作临时对象,根据其分配的类型获取值。
这对于分配给元组是很明显的:
ts
然而,该类应该也可以与std :: tie一起使用。
// 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();
fetch_values期望值类型参数,因此上面需要更改,因为tie导致T ...是引用类型。为了达到这个目的,我最终得到了另一种转换为引用元组的方法:
int a, b;
std::tie(a, b) = get_temporary();
这确实可以编译和工作,但我有几个问题:
只有在返回之前在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
'd变量中?
Adding push notification tags from an Azure Mobile Apps client
答案 0 :(得分:1)
你的两个片段都会返回悬空指针。
您只需按价值返回:
// temporary class conversion operator
template<typename... T>
operator std::tuple<T...>() const {
return fetch_values<T...>(); // returns tuple<T...>
}
使用std::tie
进行转换即可。