Вы можете Display
взять фиктивную константную ссылку на тип, который может быть создан только из частного вложенного класса, в который вы хотите делать вызовы.Затем, чтобы передать этот тип в Display
, вы должны быть членом этого класса.
Но зачем вам это делать, если friend
делает именно то, что вы хотите?
Кодпример:
class AllowedCaller
{
private:
class FriendHackHelp
{
};
public:
class FriendHack
{
public:
// You can only create a FriendHack from inside this class now...
FriendHack(const FriendHackHelp&) { }
};
void run();
};
class Displayer
{
public:
void Display(const AllowedCaller::FriendHack&) { /* Whatever */ }
};
void AllowedCaller::run()
{
Displayer d;
d.Display(FriendHack(FriendHackHelp()));
}
int main()
{
return 0;
}