Skip to content

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

See Also