Если предположить, что подойдет любой экземпляр класса, почему статическая функция не может просто создать свой собственный временный экземпляр класса?Особенно, если есть конструктор по умолчанию.Например, приведенный ниже код компилируется правильно:
class Circle
{
public:
Circle(double centerX, double centerY, double radius);
Circle() : Circle(0.0, 0.0, 1.0) // unit circle by default
{}
inline double getRadius() { return radius; };
inline double getArea() { return area; };
static double computePi(); // HERE
private:
double centerX, centerY, radius, area;
};
Circle::Circle(double centerX, double centerY, double radius)
: centerX(centerX), centerY(centerY), radius(radius)
{
area = 3.14159*radius*radius;
}
double Circle::computePi() // static class function, no "this" allowed
{
Circle tmpC1; // temporary instance here !
Circle* tmpThis = &tmpC1;
double radius = tmpThis->getRadius();
double area = tmpThis->getArea();
double pi = area / (radius*radius);
return pi;
}
ОК, семантика выглядит немного странной, но, возможно, она выглядит лучше в вашем собственном контексте.