basic_facade_builder::support_rtti
basic_facade_builder::support_indirect_rtti
basic_facade_builder::support_direct_rtti
using support_rtti = support_indirect_rtti; // since 3.2.0
using support_indirect_rtti = basic_facade_builder</* see below */>; // since 3.2.0
using support_direct_rtti = basic_facade_builder</* see below */>; // since 3.2.0
The member types support_rtti
, support_indirect_rtti
and support_direct_rtti
add necessary convention and reflection types to the template parameters, enabling RTTI support for proxy<F>
, where F
is a facade type built from basic_facade_builder
. 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>
(if support_rtti
or support_indirect_rtti
is specified) or proxy<F>
(if support_direct_rtti
is specified).
Name | Description |
---|---|
proxy_typeid |
returns the typeid of the contained type |
proxy_cast |
type-safe access to the contained object |
#include <iostream>
#include "proxy.h"
struct RttiAware : pro::facade_builder
::support_rtti
::support_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"
}