Это может быть суть, но вы можете немного изменить дизайн своих классов, чтобы использовать частный статический прокси-объект с открытым методом:
header
class CA
{
friend class CMyFriend;
private:
class CAProxy final {
friend class CA;
private:
CAProxy(){}
};
static CAProxy proxy;
static void TestedFunc();
public:
static void TestedFunc(const CAProxy& proxy); // This just calls TestedFunc();
};
реализация
CA::CAProxy CA::proxy{};
void CA::TestedFunc(const CAProxy& proxy) {
TestedFunc();
}
void CA::TestedFunc() {
// your code...
}
caller
class CMyFriend
{
public:
static void Tester()
{
CA::TestedFunc(CA::proxy); // This will call the public method
}
};
Поскольку общедоступному методу требуется ссылка на объект, экземпляр которого никто не может создать, кромеCA
, и поскольку статический экземпляр CA::proxy
является частным и доступен только для друзей, только друзья могут вызывать этот открытый метод.