# The Passkey Pattern
For the Chromium implementation of this pattern, see
[//base/types/pass_key.h].
The Passkey pattern is used when you need to expose a subset of a class's
methods to another class in a more granular way than simply friending the other
class. In essence, it involves creating a "passkey" class that can only be
constructed by specific other classes, and requiring an instance of that passkey
class to be passed in when calling methods you wish to restrict the use of. It
is used like this:
```cpp
class Foo {
public:
Foo();
~Foo();
void NormalPublicMethod();
bool AnotherNormalPublicMethod(int a, int b);
class BarPasskey {
private:
friend class Bar;
BarPasskey() = default;
~BarPasskey() = default;
};
void HelpBarOut(BarPasskey, ...);
};
...
void Bar::DoStuff() {
foo->HelpBarOut(Foo::BarPasskey(), ...);
}
```
The private constructor on `Foo::BarPasskey` prevents any class other than `Bar`
from constructing a `Foo::BarPasskey`, which means that:
* Only `Bar` can call those methods
* `Bar` can delegate the ability to call those methods to other
classes/functions by passing them a `Foo::BarPasskey` instance
This method is effectively free at runtime - a few extra bytes of argument space
are used to pass in the Passkey object.
It is encouraged to leave the `BarPasskey` parameter unnamed to reinforce that it
carries no semantic information and is not actually used for anything.
[//base/types/pass_key.h]: ../../base/types/pass_key.h