C++ is a general-purpose systems programming language that is now more than 40 years old, having been designed in 1979. Far from losing steam, C++ still ranks near the top of multiple programming language popularity indexes.
Smoothing the path to C++ usage is broad support for the language among the makers of IDEs, editors, compilers, test frameworks, code quality, and other tools. Software developers also have at their disposal many excellent libraries to assist with building C++ applications. Here are 12 that C++ developers rely on.
Active Template Library
From Microsoft, Active Template Library (ATL) is a set of C++ classes for building COM (Common Object Model) objects, with support for COM features such as dual interfaces, standard COM enumerator interfaces, connection points, and ActiveX controls. Available with the Visual Studio IDE, ATL can be used to build single-threaded objects, apartment-model objects, free-threaded model objects, or both free-threaded and apartment-model objects.
Asio C++ library
The Asio C++ library is used for network and low-level I/O programming, offering a consistent asynchronous model. Providing basic building blocks for concurrency, C++ networking, and other types of I/O, Asio has been used in applications ranging from smartphone apps and games to highly interactive websites and real-time transaction systems. Projects using Asio include the WebSocketPP library and the DDT3 remote debugger for the Lua language. Asio is available as free open source under the Boost Software License, and supported on Linux, Windows, MacOS, and FreeBSD.
Boost provides free, peer-reviewed portable C++ source libraries, accessible from boost.org, that work with the C++ standard library. Boost libraries are intended to be used across a spectrum of applications. Among the collection are libraries for JSON, math, multi-index, file system, and geometry. Boost works on most modern operating systems including Linux, Unix, and Windows. Linux and Unix distributions such as Debian, Fedora, and NetBSD already include pre-built Boost packages.
Cinder is an open source library for “creative coding” in C++. Useful for applications such as audio, computational geometry, graphics, and video, Cinder supports platform-native windowing and event-handling, along with I/O abstraction, and has a built-in API for XML and JSON parsing. Designed around idiomatic C++ 11 features such as shared_ptr, the library ships with numerous samples. Cinder supports MacOS, iOS, Linux, Windows, and Windows UWP.
Eigen is a C++ template library for linear algebra, including matrices, vectors, numerical solvers, and related algorithms. All matrix sizes are supported, from small, fixed matrices to arbitrarily large, dense matrices. Algorithms are selected for reliability. All standard numeric types are supported. For speed, Eigen features expression templates to intelligently remove temporaries and enable lazy evaluation. Freely available under the Mozilla Public License 2 and downloadable from the Eigen project page, Eigen has been fitted with an API described by proponents as expressive and clean and natural to C++ programmers. The test suite for Eigen has been run against many compilers to ensure reliability.
FloatX, or Float eXtended, is a header-only library for low-precision, floating point type emulation. While natively compatible with C++ compilers, FloatX can be called by other languages such as Python or Fortran. Floating point types are extended beyond the native single and double precision types. Template types are provided that allow the user to select the number of bits used for the exponent as well as significant parts of the floating point number. FloatX is based on the idea of the FlexFloat library for emulating reduced-precision floating types, but implements a superset of FlexFloat functionality in C and provides C++ wrappers. FloatX emerged from the Open Transprecision Computing initiative. It is available free under the Apache License 2.0.
OpenCV, or Open Source Computer Vision Library, is a computer vision and machine learning library written natively in C++, and available under an Apache 2 license. OpenCV was built to provide common infrastructure for computer vision applications and accelerate the use of machine perception in commercial products. More than 2,500 optimized algorithms for face recognition, object detection, object classification, 3D model extraction, image search, and much more, OpenCV has amassed a user community of more than 47,000 persons. Available from the OpenCV project website, the library provides C++, Java, Python, and Matlab interfaces and supports Windows, Linux, Android, and MacOS. CUDA and OpenCL interfaces are in development.
Poco C++ Libraries
Intended to simplify C++ development, the Poco (Portable Components) C++ Libraries are cross-platform C++ libraries for building Internet and network applications to run on systems ranging from desktops and servers to mobile and IoT devices. The libraries also can be used to build microservices with REST APIs for machine learning or data analytics. The Poco libraries are similar in concept to the Java Class Library, Microsoft’s .NET Framework, or Apple Cocoa.
Developers can use Poco libraries to build application servers in C++ that talk to SQL databases, Redis, or MongoDB, or to build software for IoT devices that talk to cloud back-ends. Among the features of the libraries are a cache framework, HTML form handling, an FTP client for transferring files, and an HTTP server and client. The Poco libraries are available free under the Boost Software License and downloadable from GitHub.
Velox is an embeddable, vectorized execution library for OLAP systems. The library is intended to optimize data processing systems and query engines. The project was begun as an internal engineering project at Facebook in 2020 and then open sourced. In common usage scenarios, Velox takes a fully optimized query plan as input and performs the described computation. Components include a high-level typing system, a columnar memory module, function packages, and network serializers. Velox is available on GitHub in the Facebook Incubator repo.
Windows Template Library
Originally from Microsoft, the Windows Template Library (WTL) is (since 2004) an open source library for building lightweight Windows applications and UI components. Positioned as an alternative to the Microsoft Foundation Classes toolkit, WTL extends ATL and provides a set of classes for controls, dialogs, frame windows, and GDI objects.
Yocto/GL is a collection of small C++17 libraries for building physically-based graphics algorithms. It is written in a data-oriented style for ease of development, and split into small libraries to make code navigation easier. Data is stored in simple structs and accessed with free functions or directly.
Yocto/GL includes code from the PCG random number generator, boost
hash_combine, and external libraries from the public domain or that are included with their own licenses. The developers of Yocto/GL prefer a functional approach rather than an object-oriented one, favoring free functions to class methods. Functions and data are defined in sibling namespaces contained in the yocto namespace.
Yocto/GL is released under the MIT license and available from GitHub. A C++17 compiler is required.
Copyright © 2022 IDG Communications, Inc.