来自静态函数的静态函数
Static function from static function
我有一个 class 具有非静态功能。由于我的程序的体系结构,我认为使用静态函数会更好,因为 class 只是一个实用程序。在某些情况下,我只需要 class 的一个函数,所以我认为没有必要创建对象。基本上我有这个:
class StaticCall
{
public:
StaticCall(){}
static int call_1()
{
std::cout << "In call 1" << std::endl;
call_2();
return 0;
}
static int call_2();
{
std::cout << "In call 2" << std::endl;
return 0;
}
};
int main( int argv, char** argc )
{
std::cout << "Calling 1" << std::endl;
StaticCall::call_1();
std::cout << std::endl;
std::cout << "Calling 2" << std::endl;
StaticCall::call_2();
return 0;
}
效果很好,但我想知道这种方法会不会有什么问题。我可以通过使用其他帖子已经说过的名称空间来实现相同的目的。但是因为我已经有了 class 我想用静态函数来做。
您在这里所做的是使用 class 封装两个方法 - 与名称空间相同。您实质上是将名称空间的使用替换为 class。
有用吗??是的,确实如此!
这样做可以吗?好吧,从代码 maintenance/readability 的角度来看,并没有那么多,因为:
- 您可以继承自 class
- 你可以实例化一个class
- 静态方法不属于任何 class 实例,这可能会在以后引起问题,尤其是在扩展 class.
时
如果您想要的只是封装,或者一种不污染全局命名空间的方法 - 这就是您拥有命名空间的原因。
当您正确使用 c++ 提供的语言功能时,代码会更清晰、更易读且复杂性会大大降低。
我有一个 class 具有非静态功能。由于我的程序的体系结构,我认为使用静态函数会更好,因为 class 只是一个实用程序。在某些情况下,我只需要 class 的一个函数,所以我认为没有必要创建对象。基本上我有这个:
class StaticCall
{
public:
StaticCall(){}
static int call_1()
{
std::cout << "In call 1" << std::endl;
call_2();
return 0;
}
static int call_2();
{
std::cout << "In call 2" << std::endl;
return 0;
}
};
int main( int argv, char** argc )
{
std::cout << "Calling 1" << std::endl;
StaticCall::call_1();
std::cout << std::endl;
std::cout << "Calling 2" << std::endl;
StaticCall::call_2();
return 0;
}
效果很好,但我想知道这种方法会不会有什么问题。我可以通过使用其他帖子已经说过的名称空间来实现相同的目的。但是因为我已经有了 class 我想用静态函数来做。
您在这里所做的是使用 class 封装两个方法 - 与名称空间相同。您实质上是将名称空间的使用替换为 class。
有用吗??是的,确实如此!
这样做可以吗?好吧,从代码 maintenance/readability 的角度来看,并没有那么多,因为:
- 您可以继承自 class
- 你可以实例化一个class
- 静态方法不属于任何 class 实例,这可能会在以后引起问题,尤其是在扩展 class. 时
如果您想要的只是封装,或者一种不污染全局命名空间的方法 - 这就是您拥有命名空间的原因。
当您正确使用 c++ 提供的语言功能时,代码会更清晰、更易读且复杂性会大大降低。