静态函数对类构造的好处
Benefits of Static Functions for Class Constructions
本文关键字:静态函数 更新时间:2023-10-16
我看到过这样的代码,所以我正在努力寻找原因
让静态函数充当构造函数而不是实际构造函数的主要原因是什么?
我的意思是:
class MyClass
{
public:
static MyClass CreateFrom( bar );
static MyClass CreateFrom( foo );
...
}
而不是:
class MyClass
{
public:
MyClass( bar );
MyClass( foo );
...
}
这被称为"命名构造函数习惯用法"。
它通常用于以下情况:
- 你有很多具有足够相似的参数列表的actor,重载的actor会令人困惑(例如,整数和浮点数的不同混合物,所以
1, 1.0, 1
应该意味着与1, 1, 1.0
不同的东西) - 您有两个不同的源,它们都以相同的类型提供输入。例如,假设您希望将地球表面的距离转换为相距该距离的点之间的夹角,但您可能希望以英里或公里为单位提供距离,其中任何一个都将表示为
double
在这种情况下,单个angle(double dist)
无法区分以公里和英里为单位的输入,但:angle_from_miles
和angle_from_kilomters
可以很容易地做到这一点。
它们被称为Named Constructors
。
当您想要构造一个需要传递一组特定参数的对象,但在内部需要以不同的方式构造对象时,基本上会使用。
例如,您有一个类:
class AREA
{
double area;
AREA(int x);
};
//how will you construct the object differently in case of circle and square??
为此,我们命名了有助于创建相关对象的构造函数。
因此,我们可以在类中创建2个静态方法,如下所示:
static AREA square(int x)
{ return AREA(x*x); }
和
static AREA circle(int x)
{ return AREA(x*x*3.14); } //or a more accurate PI value
因此,我们可以调用相关的静态函数来返回用所需区域初始化的对象。
注意:这些是静态的,因为在为特定类创建对象时,不应该要求对象这样做。
有关更多详细信息,请查看THIS。
最明显的好处是:
- 当提供了多个构造函数时,很容易指定在调用站点构造实例的实现。这使得类更容易提供多个变体
- 这些变体也可能有不同的名称,但有相同的参数列表(或者编译器在决定选择哪个时可能会称之为不明确的参数列表)
- 它对您有帮助,因为您可以在调用站点读取实现调用的构造函数
另一个原因是,在某些情况下,在函数体中初始化类比使用初始化列表更容易。
相关文章:
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 检查编译时是否存在静态函数
- 名称隐藏对静态函数继承的实例使用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 类中静态函数C++意外结果
- 在工人类中使用不同类的静态函数进行实验
- 类 Referention 中C++回调函数引用非静态函数
- 指向模板上下文中的成员函数或静态函数的指针
- 如何检测 Clang AST C++中的静态函数
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- 如何在静态函数中使用成员函数数组
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 生成代码(在编译时)以调用模板的每个实例化的静态函数
- C++无法访问或使用静态函数
- 如何将 cpp 文件中的静态函数公开给其他文件
- 将函数的引用设置为其他 c++ 文件中的非静态函数
- 方法的静态函数的等价性
- 扩展包含静态函数的类
- 非静态函数可以访问静态变量吗?
- 调用非静态函数作为谓词?