proxy

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).

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.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"
}

See Also