Alias template rtti
Alias template indirect_rtti
Alias template direct_rtti
Header:
proxy.h
Module:proxy
Namespace:pro::inline v4::skills
Since: 4.0.0
template <class FB>
using indirect_rtti = /* see below */;
template <class FB>
using direct_rtti = /* see below */;
template <class FB>
using rtti = indirect_rtti<FB>;
The alias templates rtti, indirect_rtti, and direct_rtti modify a specialization of basic_facade_builder, enabling RTTI support for proxy<F>, where F is a built facade type. For an RTTI-enabled facade F, non-member functions proxy_typeid (similar to std::any::type) and proxy_cast (similar to std::any_cast) are available for proxy_indirect_accessor<F> (for rtti and indirect_rtti) or proxy<F> (for direct_rtti).
Non-Member Functions
| Name | Description |
|---|---|
proxy_typeid |
returns the typeid of the contained type |
proxy_cast |
type-safe access to the contained object |
Example
#include <iostream>
#include <proxy/proxy.h>
struct RttiAware : pro::facade_builder //
::add_skill<pro::skills::rtti> //
::add_skill<pro::skills::direct_rtti> //
::build {};
int main() {
int v = 123;
pro::proxy<RttiAware> p = &v;
std::cout << proxy_typeid(p).name() << "\n"; // Prints "Pi" (assuming GCC)
std::cout << proxy_cast<int*>(p) << "\n"; // Prints the address of v
std::cout << proxy_typeid(*p).name() << "\n"; // Prints "i" (assuming GCC)
std::cout << proxy_cast<int>(*p) << "\n"; // Prints "123"
}