Loading...
Searching...
No Matches
pqxx::internal::callgate< HOME > Class Template Reference

Base class for call gates. More...

Inheritance diagram for pqxx::internal::callgate< HOME >:
[legend]

## Protected Types

using | super = callgate<HOME>
| This class, to keep constructors easy.
using | reference = HOME &
| A reference to the host class. Helps keep constructors easy.

## Protected Member Functions

| callgate (reference x)
reference | home () const noexcept
| The home object. The gate class has full "private" access.

## Detailed Description

template<typename HOME>
class pqxx::internal::callgate< HOME >

Base class for call gates.

A call gate defines a limited, private interface on the host class that specified client classes can access.

The metaphor works as follows: the gate stands in front of a "home," which is really a class, and only lets specific friends in.

To implement a call gate that gives client C access to host H,

- derive a gate class from callgate<H>;
- make the gate class a friend of H;
- make C a friend of the gate class; and
- implement "stuff C can do with H" as private members in the gate class.

This special kind of "gated" friendship gives C private access to H, but only through an expressly limited interface. The gate class can access its host object as home().

Keep gate classes entirely stateless. They should be ultra-lightweight wrappers for their host classes, and be optimized away as much as possible by the compiler. Once you start adding state, you're on a slippery slope away from the pure, clean, limited interface pattern that gate classes are meant to implement.

Ideally, all member functions of the gate class should be one-liners passing calls straight on to the host class. It can be useful however to break this rule temporarily during inter-class refactoring.

The documentation for this class was generated from the following file:

- /build/libpqxx-hcWu4i/libpqxx-7.10.0/include/pqxx/internal/callgate.hxx