Kernel C++: Part Two: Constexpr and Friends
Abstract
Part Two: Constexpr and Friends
As you can see these two structures leverages the "constexpr" keyword to make sure that no bugs or panic occurs at runtime because of a misuse of a system resource.
Which is why the constexpr keyword is very powerful here, we avoid the many pitfalls of writing (and hoping) that the C version will be well-thought enough so that we can catch such bugs later.
Bonus: Concept and the Device Driver Kit
The following shows how powerful C++ can be when combining it with Device Driver development as well.
/// Reference implementation: https://github.com/nekernel-org
/// /nekernel/blob/stable/src/libDDK/DriverKit/c%2B%2B/driver_base.h
/// @brief This concept requires the Driver to be IDriverBase compliant.
template <typename T>
concept IsValidDriver = requires(T a) {
{ a.IsActive() && a.Type() > 0 };
};
/// @brief Consteval helper to detect
/// whether a template is truly based on IDriverBase.
/// @note This helper is consteval only.
template<IsValidDriver T>
inline consteval void ce_ddk_is_valid(T) {}
Notice
This article is only the second part of the series of blog-posts about C++ in a kernel development setting.
Follow me using the RSS feed to stay in touch!
This article is also available as a PDF here. it will be updated accordingly.