Вы можете использовать std :: необязательный . Убедитесь, что поддержка C ++ 17 включена в вашем компиляторе. Если вы используете G CC или Clang, это означает добавление -std=c++17
к флагам вашего компилятора (или -std=c++1z
в более старых версиях GCC / Clang).
#include <optional>
class Node {
private:
int data;
public:
Node(int num);
std::optional<int> AddNum(int num);
};
Node::Node(int num) : data(num) {}
std::optional<int> Node::AddNum(const int num)
{
if (data + num > 10) {
return num;
}
// Returns a default-constructed optional, which is empty.
return {};
}
При вызове AddNum()
, вы должны проверить, является ли возвращаемый необязательный параметр пустым:
auto result = some_node.AddNum(some_number);
if (result) {
// OK.
std::cout << "the result is: " << *result;
} else {
// Error. No result.
}
Чтобы получить значение из необязательного параметра, вы можете использовать оператор *
для него так же, как и для указателя. Кроме того, вместо этого вы можете использовать функцию-член value()
:
std::cout << "the result is: " << result.value();
Если вы попытаетесь получить значение из пустого необязательного параметра, будет выдано исключение времени выполнения.