반응형
보통 함수를 실행한 후 결과값은 하나만 반환받을 수 있다.
함수 실행 결과와 결과값이 모두 필요할 경우에는 함수의 인자로 참조나 포인터 변수를 전달해야 했다.
C++17 이후에는 std::optional을 사용해서 함수의 반환값으로 [함수 실행 결과]와 [결과값]을 한번에 전달받을 수 있다.
1. 사용법
#include <optional>
std::optional< var-type > var-name;
(1) 인자
1-1) var-type : 함수 실행 결과값의 타입을 지정
2. 사용 예제
#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> toUpper(const std::string& pStr)
{
if (pStr.empty() == true)
{
return std::nullopt;
}
std::string str{pStr};
std::transform(str.begin(), str.end(), str.begin(), [](const char c) {
return std::toupper(c);
});
return std::make_optional<std::string>(str); // return str; 로 대체 가능
}
void printResult(const std::optional<std::string>& pRet)
{
if (pRet == std::nullopt) // (pRet.has_value() == false)로 대체 가능
{
std::cout << "failed !!!" << std::endl;
}
else
{
std::cout << *pRet << std::endl; // pRet.value()로 사용 가능
}
}
int main()
{
std::optional<std::string> ret{toUpper("abcdefg")};
printResult(ret); // ABCDEFG
ret = toUpper("");
printResult(ret); // failed !!!
return 0;
}
반응형