3 ms·
I ported some null-heavy Java code to C++. The source frequently returns an object, or null in case of error; e.g., BigInteger bi = rational.asBigInteger(
by SloopJon 6y ago
I ported some null-heavy Java code to C++. The source frequently returns an object, or null in case of error; e.g.,
BigInteger bi = rational.asBigInteger();
if (bi != null) {
...
}
One of the classes is essentially a node in a graph, so in my first pass its objects were wrapped in a shared_ptr, which can be null. However, objects of the other two types are typically passed by value in C++, so I had to think about that. Exactly what std::optional was designed for, but do I want to require C++17, both in the implementation and the public interface? The syntax looks nice enough:
if (auto bi = rational.asBigInteger()) {
... // bi is like a non-null pointer
}
Java has java.util.Optional, but the source predates Java 8.
TypeScript's type guard approach is really clever. Once you've checked the value, you can use it like normal. No need for a wrapper class, or different syntax.