Templates are an extremely powerful C++ feature that enables writing generic implementations that are also highly efficient. By instantiating the implementation for each combination of template arguments used it is possible to generate code equivalent or close to that of a hand-written implementation. However, this type-awareness that opens the door to efficiency also closes the door to crossing virtual or binary interfaces, as well as preventing other everyday activities like storing things in a container. Thus, it is often necessary to collapse all this generality into a single type, effectively erasing the concrete type of the objects involved.
There is a trending misconception about the templated nature of
std::chrono. The claim comes in different forms, but it always boils down to
std::chrono::time_point being templates and thus impossible to use together with virtual functions or across a binary interface. The claim seems to be based on the assumption that using the templated features of
std::chrono require templates all the way down, which is blatantly wrong...
std::bind for partial function application, which is the process of fixing a number of arguments to a function, producing another function of same or smaller arity. In the C++ lands,
std::bind returns a function object which stores copies of the fixed arguments —known as bound arguments—, allowing the resulting bind expression to be called at points far from where it was created, multiple times if desired. This has important implications when the intention is to make that call just once...
One year down the road, 2013 has gone by but not without modifications to the C++ lands. Two major compilers have reached C++11 conformance —GCC and Clang —. Shortly after, the Committee Draft (CD) for C++14 was completed, which is now just around the corner...
Inheritance is a handy tool to simplify design and avoid code duplication. However, good old fashion inheritance is not always the right tool for the job. What if a base class could know, at compile time, who derives from it? Enter the curiously recurring template pattern (CRTP)...
call_me_maybe function takes a target as its only argument. If the target object can be called with some specific arguments, it will call it. But not immediately —it doesn't want to look desperate—; instead, it will store it somewhere until the time is right. What follows is how such a crazy function is implemented...
There are 5 types of character literals in C++. Two types of character literal for the narrow-kings under the sky, two for the universal-lords in their halls of stone, one for the mortal wide doomed to die, in the land of C++ where the shadows lie.
In the beginning there was no
bool. And C++ said "let there be
bool", and there was
The Boolean data type is an integral type with only two values:
false, intended to represent the truth values of logic and Boolean algebra. With only two values, what can possibly go wrong?