如何在结构中将值传递给 std::optional?
How to pass value to std::optional in a structure?
我正在尝试使用 std::optional,如下面的代码所示。
#include <iostream>
#include <optional>
#include <string>
struct Animal {
std::string name;
};
struct Person {
std::string name;
std::optional<Animal> pet;
};
int main() {
Person person;
person.name = "John";
if (person.pet) {
std::cout << person.name << "'s pet's name is " <<
person.pet->name << std::endl;
}
else {
std::cout << person.name << " is alone." << std::endl;
}
}
我想知道如何将值传递给作为结构的可选参数 pet。
我试过
person.pet = std::make_optional<Animal>("Bru");
和
person.pet = "Bru"
但这两个都不行。我应该如何将值传递给我的参数?
person.pet = "Bru"
您的 pet 字段不是字符串,它是一个 Animal
,因此您需要向其传递一个 Animal
实例。试试这个:
person.pet = Animal { "Bru" };
或者简单地说:
person.pet = { "Bru" };
您正试图用 char array
构造一个 Animal
对象,但不能那样做。
一个选项是在创建 std::optional
实例时就地构建它。
person.pet = std::make_optional(Animal{"Bru"});
或者,更神秘:
person.pet = std::make_optional<Animal>({{"Bru"}});
但是,由于 std::make_optional
的优点之一是不需要模板参数,所以第二个选项不太好。
也不错,我确实更喜欢在可用时使用 std::make_*
函数,但我想在这种情况下应该没有太大区别。
我不确定你为什么要在这里使用可选的。然而你在做什么
person.pet = "Bru"
正在将 person.pet 设置为一个字符串,当您有
std::optional<Animal> pet;
这样你实际上是将 pet 设置为动物结构。
所以要得到你想要的东西,你需要像这样声明一个新的动物对象。
int main() {
Person person;
person.name = "John";
Animal _animal;
_animal.name = "bru";
person.pet = _animal;
if (person.pet) {
std::cout << person.name << "'s pet's name is " <<
person.pet->name << std::endl;
}
else {
std::cout << person.name << " is alone." << std::endl;
}
}
我正在尝试使用 std::optional,如下面的代码所示。
#include <iostream>
#include <optional>
#include <string>
struct Animal {
std::string name;
};
struct Person {
std::string name;
std::optional<Animal> pet;
};
int main() {
Person person;
person.name = "John";
if (person.pet) {
std::cout << person.name << "'s pet's name is " <<
person.pet->name << std::endl;
}
else {
std::cout << person.name << " is alone." << std::endl;
}
}
我想知道如何将值传递给作为结构的可选参数 pet。 我试过
person.pet = std::make_optional<Animal>("Bru");
和
person.pet = "Bru"
但这两个都不行。我应该如何将值传递给我的参数?
person.pet = "Bru"
您的 pet 字段不是字符串,它是一个 Animal
,因此您需要向其传递一个 Animal
实例。试试这个:
person.pet = Animal { "Bru" };
或者简单地说:
person.pet = { "Bru" };
您正试图用 char array
构造一个 Animal
对象,但不能那样做。
一个选项是在创建 std::optional
实例时就地构建它。
person.pet = std::make_optional(Animal{"Bru"});
或者,更神秘:
person.pet = std::make_optional<Animal>({{"Bru"}});
但是,由于 std::make_optional
的优点之一是不需要模板参数,所以第二个选项不太好。
std::make_*
函数,但我想在这种情况下应该没有太大区别。
我不确定你为什么要在这里使用可选的。然而你在做什么
person.pet = "Bru"
正在将 person.pet 设置为一个字符串,当您有
std::optional<Animal> pet;
这样你实际上是将 pet 设置为动物结构。
所以要得到你想要的东西,你需要像这样声明一个新的动物对象。
int main() {
Person person;
person.name = "John";
Animal _animal;
_animal.name = "bru";
person.pet = _animal;
if (person.pet) {
std::cout << person.name << "'s pet's name is " <<
person.pet->name << std::endl;
}
else {
std::cout << person.name << " is alone." << std::endl;
}
}