Stupid C++ trick(s)
28/Jun 2008
(idea shamelessly stolen from Jim Tilander and Power of Two Games. Not fullblown post, just random notes from time to time, as I learn/think about it)
how to easily make sure all our header are self-contained? Include header as the first one in corresponding .cpp file. For example (ThreadPool class, ThreadPool.cpp file):
If my coding standard could only have single rule - it would be this one.#include "thread/ThreadPool.h" #include "thread/LockFreeMemList.h" #include "thread/LockFreeQueue.h" #include "thread/Task.h" #include "thread/TaskGroup.h"
SFINAE (Subsitution Failure Is Not An Error). That’s a neat little “feature” of C++, where invalid substitution of template parameters is not an error in itself. It can be abused for all kinds of crazy compile-time checks. Say, we want to test if type T has an internal _keytype typedef.
template char HasKeyType(...); template int HasKeyType(typename T::key_type*); bool hasKeyType = sizeof(HasKeyType<std::map<int, int> >(0)) != sizeof(char);
MSVC specific - how to make sure you didnt forget to disable exceptions/RTTI for all your libraries? It turns out that Visual C++ defines macros that let you check it.
- _CPPUNWIND - if exceptions are enabled,
- _CPPRTTI - if RTTI is enabled.