返回类型的std ::可选 >

问题描述 投票:7回答:2

我有这样一种情况:函数必须返回从表中提取的值。此表中的单元格(假设表只是工作...)可以包含一个值,也可能不是。该值也可以是几种类型中的一种:int, double, string, date(但不包括其他类型)。

将这样一个函数返回什么?它是返回std::optional<std::variant<std::string, int, double, std::chrono::time_point>>一个好主意?

那会是一个很好的使用optionalvariant的?

c++ optional c++17 variant
2个回答
16
投票

我认为这是std::monostate的一个有用的应用。具体来说,variant<std::monostate, int, double, std::string, std::chrono::time_point>monostate是对于其中variant可能不包含的值的情况下是有用的。

有关使用实际类型而不是optional<variant>的好处是,探视正常工作就可以了。你可以写一个仿函数,可以采取一个monostate参数,从而使您可以使用visit甚至“空”的变种。


2
投票

只是想补充一点,之前的C ++ 17和variantmonostate的标准化,已经有boost::blank解决完全相同的问题进行boost::variant

按照惯例,如果使用boost::blank,它应该永远是第一个模板参数,使默认构造的变种是空的,用于emptyness检查与.which() == 0完成。

© www.soinside.com 2019 - 2024. All rights reserved.