I'am new in cpp. Let's say we've got a class as follows:
class Animal {
public:
enum class Group {mammal, bird, reptile};
private:
Group group;
}
Now I'd like to initialise it in this way:
Animal::Group g;
std::cin >> g;
std::unique_ptr<Animal> dog = std::make_unique<Animal>(std::move(g));
I tried to overload istream as below and make it friend of class Animal
but it doesn't work.
auto string_to_vlt(std::string const s) -> std::optional<Human::Violation>
{
if (s == "mammal") return Animal::Group::mammal;
if (s == "bird") return Animal::Group::bird;
if (s == "reptile") return Animal::Group::reptile;
return std::nullopt;
}
auto operator>>(std::istream& is, Animal::Group v) -> std::istream& // friend function
{
auto s = std::string();
if (!(is >> s)) {
return is;
}
if (auto result = string_to_vlt(s)) {
v = *result;
}
return is;
}
Any ideas? Is it possible at all?