Fixed-size floating point types

Nothing like this exists in the C or C++ standards at present. In fact, there isn’t even a guarantee that float will be a binary floating-point format at all. Some compilers guarantee that the float type will be the IEEE-754 32 bit binary format. Some do not. In reality, float is in fact the IEEE-754 … Read more

C++ – passing references to std::shared_ptr or boost::shared_ptr

I found myself disagreeing with the highest-voted answer, so I went looking for expert opinons and here they are. From http://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2011-Scott-Andrei-and-Herb-Ask-Us-Anything Herb Sutter: “when you pass shared_ptrs, copies are expensive” Scott Meyers: “There’s nothing special about shared_ptr when it comes to whether you pass it by value, or pass it by reference. Use exactly the … Read more

Cmake doesn’t find Boost

Are you sure you are doing it the correct way? The idea is that CMake sets BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR and BOOST_ROOT automatically. Do something like this in CMakeLists.txt: FIND_PACKAGE(Boost) IF (Boost_FOUND) INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR}) ADD_DEFINITIONS( “-DHAS_BOOST” ) ENDIF() If boost is not installed in a default location and can, thus, not be found by CMake, you can tell … Read more

Weighted random numbers

There is a straightforward algorithm for picking an item at random, where items have individual weights: 1) calculate the sum of all the weights 2) pick a random number that is 0 or greater and is less than the sum of the weights 3) go through the items one at a time, subtracting their weight … Read more

Example for boost shared_mutex (multiple reads/one write)?

1800 INFORMATION is more or less correct, but there are a few issues I wanted to correct. boost::shared_mutex _access; void reader() { boost::shared_lock< boost::shared_mutex > lock(_access); // do work here, without anyone having exclusive access } void conditional_writer() { boost::upgrade_lock< boost::shared_mutex > lock(_access); // do work here, without anyone having exclusive access if (something) { … Read more

64-bit version of Boost for 64-bit windows

As a short answer: bjam –toolset=msvc-9.0 address-model=64 –build-type=complete As a longer answer, here are my build notes for having VS .NET 2008 32-bit and 64-bit boost libraries in the same hierarchy (which is I suspect a common use case): Build the win32 binaries bjam –toolset=msvc-9.0 –build-type=complete stage Create the directory lib\win32 Move the contents of … Read more

Downcasting shared_ptr to shared_ptr?

You can use dynamic_pointer_cast. It is supported by std::shared_ptr. std::shared_ptr<Base> base (new Derived()); std::shared_ptr<Derived> derived = std::dynamic_pointer_cast<Derived> (base); Documentation: https://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast Also, I don’t recommend using cast operator in the base class. Implicit casting like this may become the source of bugs and errors. -Update: If the type is not polymorphic, std::static_pointer_cast may be used.