c++ - 在 C++11 中返回包含 const-reference 的 std::tuple
问题描述
我有这样的东西(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();
一个想法是将布尔值作为输出参数返回并删除元组,但有更好的解决方案吗?
解决方案
使用std::get
. 它返回对存储元素的引用。
#include <iostream>
#include <tuple>
using MyType = int;
MyType some_internal_reference = 42;
std::tuple<const MyType&, bool> func()
{
return { some_internal_reference, true };
}
int main()
{
auto ret = func();
const MyType& obj = std::get<0>(ret);
std::cout << "before change: " << obj << '\n';
some_internal_reference = 7;
std::cout << "after change: " << obj << '\n';
}
它打印
before change: 42
after change: 7
请注意,根据@StoryTeller-UnslanderMonica 的评论,不要std::make_tuple
在这种情况下使用。它存储一个衰减(裸类型)副本。
推荐阅读
- c++ - 简单的多个目录 CMake
- asp.net-mvc - Rotativa - 控制器上下文为空
- android - 将按钮高度设置为 wrap_content 不符合预期
- api - Github GraphQL API V4:INSUFFICIENT_SCOPES
- php - 致命错误:未捕获的错误:在 bool 上调用成员函数 fetch_object()
- spring - 使用 Spring Cloud Vault 时应用程序初始化时出现禁止错误
- c# - 如果我拒绝自己,但我有管理员权限,如何获得文件权限?
- javascript - 更新嵌套对象中的值
- tensorflow - 重新量化已经量化的模型
- r - 如何识别急剧增加/减少并使它们不适用的数据点?如何识别和消除异常值?