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
关于c++ - 未知 value_type 的默认构造 std::optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53224649/