swiftのオプショナル型非常に便利なんだけど
C++でもできるっぽい。
#include <experimental/optional>
#include <iostream>
#include <string>
using namespace std;
using namespace std::experimental;
int main()
{
optional<string> dummy1 = string("hello");
optional<string> dummy2; // empty nullptr
if(dummy1){ // string
cout << *dummy1 << endl;
}
if(dummy2){ // empty
cout << *dummy2 << endl;
}
dummy2 = dummy1; // copy
if(dummy2){ // ask length
cout << *dummy2 << endl;
}
return 0;
}
まぁswift !にあたるのが * だね。
普通にifでヌル除外とかができる。
値を取り出すには*でswiftのように明示的にunwrapしなきゃいけないので、まぁヌルチェックは忘れなくはなりそう。
ただ、ネックはexperimentalのフォルダに入っててしかもC++11じゃこのコードコンパイルできないのね。