【发布时间】:2021-08-26 11:09:11
【问题描述】:
我有这样的东西(C++11)
std::tuple<const MyType&, bool> func()
{
return std::make_tuple(some_internal_reference, true);
}
问题是在调用者中我不能声明:
const MyType& obj; // this does not compile of course
bool b;
std::tie(obj, b) = func();
一个想法是将布尔值作为输出参数返回并删除元组,但有更好的解决方案吗?
【问题讨论】:
-
用指针替换引用怎么样?
-
@VictorGubin 这里的问题是参考,而不是
const。std::move也解决不了任何问题。 -
使用
std::get,它返回一个引用。auto tup = func(); const MyType& obj = std::get<0>(tup);. -
std::make_tuple执行其参数的衰减副本。它不会推断成员的引用。你确定这是减少的问题吗? -
@Taw - 你的意思是
std::make_tuple(std::ref(...)...)?如果您的代码示例准确,它将帮助您获得帮助。 minimal reproducible example 在获得帮助方面大有帮助。是的,std::ref是让它发挥作用的一种方法。这是改变make_tuple行为的标准方法。