c++ - 未知 value_type 的默认构造 std::optional
问题描述
auto Lambda=[](auto& opt) {
opt=<default constructor of opt::value_type>;
};
std::optional<std::string> optstr;
Lambda(optstr);
std::optional<int> optint;
Lambda(optint);
在这里我希望Lambda
能够初始化opt
......但我不能说std::string()
,因为当它被调用时int
我会有一个错误。
我试过decltype
但无法编译。
解决方案
您可以使用:
auto temp = typename std::decay_t<decltype(opt)>::value_type{};
在你的 lambda 里面。或者:
auto temp = typename std::remove_cvref_t<decltype(opt)>::value_type{};
在 C++20 中。
decltype(opt)
单独不起作用,因为您通过opt
引用传递,因此它的类型是对std::optional
. 因此,您需要从结果类型中删除该引用以访问std::optional
自身,然后访问其value_type
.
它与以下代码中的相同:
std::optional<int>& o;
decltype(o)::value_type i{}; // error
甚至:
std::optional<int>&::value_type i{}; // error
推荐阅读
- python - 'object' 在 2d python 列表中不可下标
- postgresql - 从 pg_constraint 中删除重复的约束使数据库处于损坏状态
- r - 如果第 1 列具有特定值,如何计算第 2 列的平均值?R
- javascript - Raycaster 对象未定义 mouseover Three.js
- java - 在 android canvas 上画一个特殊的形状
- arrays - FormArray 无法在我的反应式表单上打印
- php - 从 SQL 表中存储变量以供以后使用 PHP
- python-3.x - uWSGI + Gevent 没有收到来自 Nginx 的请求
- python - 如何在运行单独的 tinter 代码时运行循环
- angular - Angular 可重用的 crud 组件