peo*_*oro 15 c++ static function static-members non-member-functions
在阅读sbi和Eli Bendersky在这个问题中的答案后,我开始想知道静态成员函数的用途.
一个类的朋友免费功能应该不能做任何静态成员函数可以做的事情?如果是这样,为什么/何时我应该更喜欢静态成员函数给朋友免费?
Cas*_*Cow 13
一般来说:
要求访问私人会员
静态成员函数可以访问该类的私有成员.如果需要,可以使用静态成员函数.你必须在标题中声明它才能让它访问,所以你也可以把它变成一个成员而不是一个朋友.对于具有getInstance()方法作为单例的单例,以及使用静态工厂方法createInstance()来确保它们在堆上创建的类,通常采用这种方式.这两个都需要访问私有构造函数.
元编程
静态成员函数非常适合模板元编程,在这种情况下,您可以传入一个类并调用其方法,而无需在调用时知道实际调用哪个函数.这通常称为"编译时多态",是元编程的重要组成部分.std :: char_traits基于这个原则.
禁止进入
私有静态成员函数的常见用法,只是为了使它只能由类访问,并且本身不需要访问私有成员,不能很好地利用静态成员函数,因为它是实现细节的一部分.这个类,最好在编译单元的匿名命名空间中完成.
但是,如果静态成员函数受到保护,则可以使用它,因为它可以由派生类调用,但不能由外部类调用.
朋友的功能
operator<<)Eli*_*sky 12
静态方法:
Animal静态方法Create,则必须使用它Animal::Create.这比全局函数更好,并允许使用相对自然的语法实现工厂和"虚拟构造函数".