https://cppfx.xyz
This program uses dynamic_cast for bidirectional conversion: cast from base_class to derived_class, and cast from derived_class to base_class.
#include <utxcpp/core.hpp> template <typename derived_class> class base_class { public: virtual ~base_class() = default; public: void fn() const { dynamic_cast<const derived_class &>(*this).func(); } public: void fizz() const { utx::print("base_class::fizz"); } }; class derived_class: public base_class<derived_class> { public: void func() const { utx::print("derived_class::func"); } public: void buzz() const { dynamic_cast<const derived_class &>(*this).fizz(); } }; int main() { derived_class dc1; dc1.fn(); base_class<derived_class> && bc1 = derived_class{}; dynamic_cast<derived_class &>(bc1).buzz(); }
derived_class::func base_class::fizz
Utxcpp is an easy and simple to use c++ library that makes simple things simple. Utxcpp has some classes, templates and functions that can be used in sycl kernel.