OpenDDS  Snapshot(2023/04/28-20:55)
Classes | Namespaces | Functions
SafeBool_T.h File Reference
#include <dds/Versioned_Namespace.h>
Include dependency graph for SafeBool_T.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  OpenDDS::DCPS::SafeBoolBase
 
class  OpenDDS::DCPS::SafeBool_T< DerivedNonVirtual >
 
class  OpenDDS::DCPS::SafeBool_T< void >
 

Namespaces

 OpenDDS
 The Internal API and Implementation of OpenDDS.
 
 OpenDDS::DCPS
 

Functions

template<typename X , typename Y >
bool OpenDDS::DCPS::operator== (const SafeBool_T< X > &x, const SafeBool_T< Y > &)
 
template<typename X , typename Y >
bool OpenDDS::DCPS::operator!= (const SafeBool_T< X > &x, const SafeBool_T< Y > &)
 

Detailed Description

Implements the "Safe Bool" idiom, which is a safer alternative to operator bool. Based on: https://www.artima.com/articles/the-safe-bool-idiom TLDR: We may want to be able to use operator bool() to check an object's abstract truthfulness using if (object) {...}, but that opens up implicit casting and comparisons that come with the bool type that are almost certainly not desired, like int count = object. This is achieved via the BoolType function pointer which isn't actually called, but is the only boolean-ish thing the type can be implicitly converted to using the BoolType operator.

If you want the boolean test function to be virtual, implement it as: virtual bool boolean_test() const; and derive the class from SafeBool_T with no template argument: class YourClass : public SafeBool_T<>.

If you do NOT want the boolean test function to be virtual, implement it as: bool boolean_test() const; and derive the class from SafeBool_T with the class as the template argument: class YourClass : public SafeBool_T<YourClass>.

Definition in file SafeBool_T.h.