Причина «правила», которое вы цитируете (на самом деле это не так), заключается в том, что функция-член static
не имеет неявного экземпляра, с которым она работает, то есть нет this
.
Тем не менее, static
функция-член может вызвать функцию-не-1008 *, если у нее есть экземпляр, с которым она может вызвать функцию-член. В этом случае он создает свой собственный экземпляр, вызывая закрытый конструктор.
Сравнить (тривиальный пример, я признаю)
class Greeter {
std::string who;
public:
Greeter(std::string const &name) : who(name) { }
static void greet(Greeter const &gr) { gr.hello(); }
private:
void hello() { std::cout << "Hello, " << who << "!\n"; }
};
Здесь static
член greet
используется для вызова private
метода hello
. Это может быть сделано, поскольку ему передается явный экземпляр Greeter
. (Это не будет работать с автономной функцией, если не объявлено friend
.)