Причина, по которой здесь требуется static
, заключается в том, что в шаблонной функции compare
имеется следующая строка:
return C::work(a, b);
Синтаксис C::work(a, b)
здесь означает "вызов функции work
вложенный в класс C
. Как правило, он пытается вызвать функцию-член без предоставления объекта-получателя. Таким образом, обычно вы вызываете функцию work
, если написать
C myCObject;
myCObject.work(a, b);
В этом случае, однако, мы не хотим вызывать функцию-член. Вместо этого мы хотим, чтобы функция work
была похожа на обычную функцию в том смысле, что мы можем вызывать ее в любое время без ее относительного действия.другому объекту. Следовательно, мы помечаем эти функции static
, чтобы их можно было вызывать как обычные функции.
Надеюсь, это поможет!