Alias template rtti
Alias template indirect_rtti
Alias template direct_rtti
Header:
proxy.h
Module:proxy
Namespace:pro::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
::support<pro::skills::rtti>
::support<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"
}