C++ 当函数需要成为成员函数时
我试图弄清楚什么时候是使用成员函数(静态)的最佳时机,什么时候在.cpp文件中只添加一个helper方法 假设在MyClass类中,我想将TypeA转换为typeB。 这是一个漫长的过程,因此我将添加一个方法来处理转换 该方法是纯函数性的,与MyClass实例的状态无关。 它获取输入并生成输出,而不使用MyClass的任何成员(私有或公共) 只有MyClass将使用此方法 现在我不确定该方法需要如何定义:C++ 当函数需要成为成员函数时,c++,C++,我试图弄清楚什么时候是使用成员函数(静态)的最佳时机,什么时候在.cpp文件中只添加一个helper方法 假设在MyClass类中,我想将TypeA转换为typeB。 这是一个漫长的过程,因此我将添加一个方法来处理转换 该方法是纯函数性的,与MyClass实例的状态无关。 它获取输入并生成输出,而不使用MyClass的任何成员(私有或公共) 只有MyClass将使用此方法 现在我不确定该方法需要如何定义: MyClass中的静态函数 使用此函数的专用类中的静态函数 帮助方法,该方法不是任何类的成
MyClass
将使用此方法”,那么它在逻辑上属于MyClass
静态成员函数
3.帮助方法,它不是任何类的成员,只是cpp文件中的定义
因此,如果需要,您可以更改helper方法的定义,而不必担心将MyClass
的客户端重新编译成静态成员函数
编辑:
As@πάνταῥεῖ 也就是说,您可以将helper方法放在一个未命名的命名空间中,以限制它在
MyClass
cpp文件(以及包括它在内的翻译单元)中的使用。如果它仅在概念上与MyClass
耦合,然后,它应该成为一个私有静态,并引入MyClass
名称空间。只要有可能,并且此函数的使用仅限于MyClass
,我会选择3。(在一个未命名的名称空间中)。像这样的一个小“实用程序”函数,我做了#3(在未命名的名称空间中也是如此),可能是为了避免在头文件中用作静态函数时重新编译。但是在1和3之间没有多大关系。未命名的名称空间是为了避免文件之间的名称冲突。它不限制只使用一个类。@NeilKirk是的,如果包含cpp文件。这个技巧在一定程度上依赖于编程约定。我不明白。@Songyuanyo它仅限于在TU中使用。单个TU不限于仅包含一个类的定义。或者作为唯一使用的源文件中的本地函数。