我是新来的。假设我们有一个如下的类:
class Animal {
public:
enum class Group {mammal, bird, reptile};
private:
Group group;
}
字符串
现在我想用这种方式初始化它:
Animal::Group g;
std::cin >> g;
std::unique_ptr<Animal> dog = std::make_unique<Animal>(std::move(g));
型
我尝试重载istream如下,并使其成为class Animal
的朋友,但它不工作。
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;
}
型
有什么想法吗?有可能吗?
1条答案
按热度按时间but5z9lq1#
有一个很酷的库可以解决这个问题Magic Enum。
它可以使代码工作,而无需大量的编码:
字符串
https://godbolt.org/z/ae7nbvbEq的
免责声明:请注意,此库利用了一些编译器特定的功能,因此不能保证它总是工作。参见限制。