3
Мне было интересно, есть ли элегантный способ отличить boost::optional<A>
до boost::optional<B>
, когда B
может быть построен из A
, хотя и явно. Это работает:boost :: optional и преобразование типа
# include <boost/optional.hpp>
class Foo
{
int i_;
public:
explicit Foo(int i) : i_(i) {}
};
int main()
{
boost::optional<int> i;
... // i gets initialized or not
boost::optional<Foo> foo;
foo = boost::optional<Foo>(bool(i), Foo(i.value_or(0 /*unused value*/)));
return 0;
}
, но необходимость вставить там какое-то значение, которое никогда не будет использоваться, кажется неудобным. Любое лучшее предложение?