我们的代码中有一个静态类函数,其中包含大量代码。在最初使用并且仍然使用此代码的地方,无法创建该类的实例,因此它是静态的。这个函数的功能现在在我们的代码库的其他地方需要,其中已经创建了类的实例。
无论如何,如果不制作同一函数的非静态和静态版本,我们就可以创建一个非静态函数,该函数包含所有可以在无法初始化类实例的地方使用静态函数轮询的代码,同时允许它使用其他地方的实际实例来调用。
例如
#include <iostream>
class Test
{
public:
Test(){};
~Test(){};
void nonStaticFunc(bool calledFromStatic);
static void staticFuncCallingNonStaticFunc();
};
void Test::nonStaticFunc(bool calledFromStatic)
{
std::cout << "Im a non-static func that will house all the code" << std::endl;
if(calledFromStatic)
// do blah
else
// do blah
}
void Test::staticFuncCallingNonStaticFunc()
{
std::cout << "Im a static func that calls the non static func that will house all `the code" << std::endl;
nonStaticFunc(true);
}
int main(int argc, char* argv[])
{
// In some case this could be called as this
Test::staticFuncCallingNonStaticFunc();
// in others it could be called as
Test test;
test.nonStaticFunc(false);
}
取决于它是否静态调用,代码可能会在非静态函数中略有改变,所以我们不能一直简单地使用静态函数,因为有时我们需要访问代码中其他地方使用的非静态成员。但是,大部分代码将保持不变。干杯